Quantcast
Channel: WordPress.org Forums » All Topics
Viewing all articles
Browse latest Browse all 59525

How do I write the correct callbacks based on existing code?

$
0
0

Replies: 0

I have the following action hook in my plugin for my AD setup page, but there is no AD title field added there [currently I am adding my AD title at the check-out, prior to the ad setup (image upload)] via the Woocommerce check-out field editor plugin, but that’s not very nice:

do_action( 'advanced-ads-selling-ad-setup-form-types-after', $ad_types, $_item );

I need to add an AD title field, so I wrote this callback based on the action hook and the existing target URL field:

function advanced-ads-selling-ad-setup-form-types-after() {

    // Add field and label

    if ??? {
    	?>
<label class="advanced-ads-selling-setup-ad-details-ad-title advanced-ads-selling-setup-ad-details-content"
						   for="advanced-ads-selling-setup-ad-details-ad-title-<?php echo esc_attr( $_item_key ); ?>"><?php esc_html_e( 'AD Title', 'advanced-ads-selling' ); ?></label>
					<input id="advanced-ads-selling-setup-ad-details-ad-title-<?php echo esc_attr( $_item_key ); ?>"
						   class="advanced-ads-selling-setup-ad-details-ad-title advanced-ads-selling-setup-ad-details-content" type="text"
						   name="advads_selling_ad_url"/>
					<?php
    }

}
add_action( '$ad_types', '$_item' );

I am not sure, do I need any “if” clause?
And otherwise is this hook correct, if looking at the methods and fields already existing in my ad-setup-form.php:

<div id="advanced-ads-selling-setup-head">
	<div id="advanced-ads-selling-order-details">
		<h3><?php printf(
				// translators: %1$d is an order ID, %2$s a string with the number of items purchased.
			esc_html__( 'Setup page for order #%1$d, %2$s', 'advanced-ads-selling' ),
			absint( $order_id ),
			sprintf(
					// translators: %d is the number of items purchased.
				esc_html__( '%d item(s)', 'advanced-ads-selling' ),
				count( $items )
			)
		); ?></h3>
		<div class="address">
		<?php
		if ( $order->get_formatted_billing_address() ) {
			echo '<p><strong>' . esc_html__( 'purchased by', 'advanced-ads-selling' ) . ':</strong><br/>' . wp_kses( $order->get_formatted_billing_address(), array( 'br' => array() ) ) . '</p>';
		}
		?>
		</div>
	</div>
</div>
<div id="advanced-ads-selling-wrapper">
	<?php
	// iterate through all ads.
	$item_count = 1;
	foreach ( $items as $_item_key => $_item ) :
		// check if this is an ad product or not.
		if ( ! isset( $_item['product_id'] ) ) {
			continue;
		}
		$product = wc_get_product( $_item['product_id'] ); // Get product_details.
		if ( 'advanced_ad' !== $product->get_type() ) {
			continue;
		}

		?>
		<div class="advanced-ads-selling-setup-ad-details">
		<h3>
		<?php
		printf(
			// translators: %d is an item ID.
			esc_html__( 'Item #%d', 'advanced-ads-selling' ),
			absint( $item_count ++ )
		);
		?>
			</h3>
		<label><?php esc_html_e( 'Pricing option', 'advanced-ads-selling' ); ?></label>
		<span>
		<?php
		$ad_pricing_label = isset( $_item['ad_pricing_label'] ) ? $_item['ad_pricing_label'] : '';
		echo esc_html( $ad_pricing_label );
		?>
		</span>
		<?php if ( isset( $_item['ad_placement'] ) ) : ?>
		<br/>
			<label><?php esc_html_e( 'Placement', 'advanced-ads-selling' ); ?></label>
		<span><?php echo esc_html( $_item['ad_placement'] ); ?></span>
	<?php endif; ?>
		<br/>
			<label><?php esc_html_e( 'Status', 'advanced-ads-selling' ); ?></label>
		<?php
		$ad_status = get_post_status( Advanced_Ads_Selling_Order::order_item_id_to_ad_id( $_item_key ) );
		if ( 'publish' === $ad_status ) :
			?>
			<p style="color:green;"><?php esc_html_e( 'The content of this ad was already accepted and can no longer be changed.', 'advanced-ads-selling' ); ?></p>
		<?php elseif ( 'pending' === $ad_status ) : ?>
			<p style="color:orange;"><?php esc_html_e( 'This ad is currently in review.', 'advanced-ads-selling' ); ?></p>
		<?php else : ?>
			<p style="color:red;"><?php esc_html_e( 'Please complete the ad details so that we can process your order.', 'advanced-ads-selling' ); ?></p>
			<form enctype="multipart/form-data" method="POST" style="clear: both;">
				<?php
				if ( ! empty( $_POST['errors'] ) ) :
					?>
					<p class="advanced-ads-selling-error" style="color: red;"><?php echo esc_html( $_POST['errors'] ); ?></p>
					<?php
				endif;
				?>
				<input type="hidden" value="advanced-ads-selling-upload-ad" name="advanced-ads-selling-upload-ad">
				<?php $ad_types = isset( $_item['ad_types'] ) ? explode( ', ', $_item['ad_types'] ) : array( 'plain' ); ?>
				<label><?php esc_html_e( 'Ad Type', 'advanced-ads-selling' ); ?></label>
								 <?php
									if ( 1 === count( $ad_types ) ) :
										?>
										<div>
											<label>
												<input type="radio" class="advanced-ads-selling-setup-ad-type" name="advads_selling_ad_type" value="<?php echo esc_attr( trim( $ad_types[0] ) ); ?>" checked="checked" />
												<?php esc_html( $ad_types[0] ); ?>
											</label>
										</div>
										<?php
									elseif ( count( $ad_types ) ) :
										?>
										<div>
										<?php
										foreach ( $ad_types as $_key => $_type ) {
											?>
						<label><input type="radio"
										class="advanced-ads-selling-setup-ad-type" <?php checked( $_key, 0 ); ?>
										name="advads_selling_ad_type"
										value="<?php echo esc_attr( trim( $_type ) ); ?>"/><?php echo esc_html( $_type ); ?></label>
											<?php
										}
										echo '</div>';
									endif;
									?>
				<label class="advanced-ads-selling-setup-ad-details-html-label advanced-ads-selling-setup-ad-details-content"><?php esc_html_e( 'Ad Code', 'advanced-ads-selling' ); ?></label>
				<?php
				if ( in_array( 'plain', $ad_types ) ) {
					?>
					<div class="advanced-ads-selling-setup-ad-details-html advanced-ads-selling-setup-ad-details-content">
						<p><?php esc_html_e( 'Please enter the ad code. HTML, JavaScript, CSS and plain text are allowed.', 'advanced-ads-selling' ); ?></p>
						<textarea name="advads_selling_ad_content"></textarea>
					</div>
					<?php
				}
				if ( in_array( 'image', $ad_types ) ) {
					?>
					<label class="advanced-ads-selling-setup-ad-details-upload-label advanced-ads-selling-setup-ad-details-content"
						   for="advanced-ads-selling-setup-ad-details-upload-input-<?php echo $_item_key; ?>"><?php _e( 'Image Upload', 'advanced-ads-selling' ); ?></label>
					<div class="advanced-ads-selling-setup-ad-details-image-upload advanced-ads-selling-setup-ad-details-content">
						<input id="advanced-ads-selling-setup-ad-details-upload-input-<?php echo esc_attr( $_item_key ); ?>" class="advanced-ads-selling-setup-ad-details-upload-input" type="file"
							   name="advads_selling_ad_image"/>
						<span class="advanced-ads-selling-dile-upload-instrct"><?php printf(
								esc_html__( 'Max File Size : %s MB', 'advanced-ads-selling' ),
								number_format_i18n( apply_filters( 'advanced-ads-selling-upload-file-size', 1048576 ) / 1000000, 1 )
							); ?></span>
					</div>
					<label class="advanced-ads-selling-setup-ad-details-url advanced-ads-selling-setup-ad-details-content"
						   for="advanced-ads-selling-setup-ad-details-url-input-<?php echo esc_attr( $_item_key ); ?>"><?php esc_html_e( 'Target URL', 'advanced-ads-selling' ); ?></label>
					<input id="advanced-ads-selling-setup-ad-details-url-input-<?php echo esc_attr( $_item_key ); ?>"
						   class="advanced-ads-selling-setup-ad-details-url-input advanced-ads-selling-setup-ad-details-content" type="url"
						   name="advads_selling_ad_url"/>
					<?php
				}
				do_action( 'advanced-ads-selling-ad-setup-form-types-after', $ad_types, $_item );
				?>
				<?php wp_nonce_field( 'advanced-ads-ad-setup-order-item-' . $_item_key, 'advads_selling_nonce' ); ?>
				<input type="hidden" name="advads_selling_order_item" value="<?php echo esc_attr( $_item_key ); ?>"/>
				<input type="submit" class="advanced-ads-selling-setup-ad-details-submit button button-primary"
					   value="<?php esc_attr_e( 'submit this ad', 'advanced-ads-selling' ); ?>"/>
			</form>
			<p class="advanced-ads-selling-setup-submit-error message"
			   style="color: red; display: none;"><?php esc_html_e( 'The ad could not be submitted. Please try later or contact the site admin.', 'advanced-ads-selling' ); ?></p>
			<p class="advanced-ads-selling-setup-submit-success message"
			   style="color: green; display: none;"><?php esc_html_e( 'The ad was successfully submitted for review.', 'advanced-ads-selling' ); ?></p>
		<?php endif; ?>
		</div>
	<?php endforeach; ?>
</div>

Then, based on the action hook in my public.php :

do_action( 'advanced-ads-selling-save-ad-content-after', $_POST );

, I should write the other callback to store the field, but how do I do that?

Would something like this be correct?

function advanced-ads-selling-save-ad-content-after() {

    // Add field and label

    if ??? {
    	?>
<label class="advanced-ads-selling-setup-ad-details-ad-title advanced-ads-selling-setup-ad-details-content"
						   for="advanced-ads-selling-setup-ad-details-ad-title-<?php echo esc_attr( $_item_key ); ?>"><?php esc_html_e( 'AD Title', 'advanced-ads-selling' ); ?></label>
					<input id="advanced-ads-selling-setup-ad-details-ad-title-<?php echo esc_attr( $_item_key ); ?>"
						   class="advanced-ads-selling-setup-ad-details-ad-title advanced-ads-selling-setup-ad-details-content" type="text"
						   name="advads_selling_ad_url"/>
					<?php
    }

}
add_action( '$_POST' );

Here is the public.php:

<?php

class Advanced_Ads_Selling {

	/**
	 * Holds plugin base class
	 *
	 * @var Advanced_Ads_Selling_Plugin
	 * @since 1.0.0
	 */
	protected $plugin;

	/**
	 * Initialize the plugin
	 * and styles.
	 *
	 * @since     1.0.0
	 */
	public function __construct() {
		$this->plugin = Advanced_Ads_Selling_Plugin::get_instance();

		add_action( 'wp_loaded', array( $this, 'save_ad_content' ) );

		// register events when all plugins are loaded
		add_action( 'plugins_loaded', array( $this, 'wp_plugins_loaded' ) );
		add_action( 'wp_loaded', array( $this, 'load_ad_setup_page' ) );

		// Enqueue public scripts and style
		add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_public_scripts' ) );

		// Add action to add "Ad link" while mail is sent
		add_action( 'woocommerce_email_after_order_table', array( $this, 'display_ad_link' ), 10, 4 );

		// manipulate product price layout
		add_action( 'woocommerce_get_price_html', array( $this, 'manipulare_price_html' ), 10, 2 );

		// show setup form in the content
		add_action( 'the_content', array( $this, 'display_setup_form' ), 1 );
	}

	public function enqueue_public_scripts() {
		global $post;

		if ( ! class_exists( 'WooCommerce', false ) ) {
			return;
		}

		wp_register_script( 'advanced-ads-selling-single-product-script', AASA_BASE_URL . 'public/assets/js/ad-setup.js', array( 'jquery' ) );

		if ( is_product() ) {
			$woocommerce_price_decimal_sep = get_option( 'woocommerce_price_decimal_sep' );
			$woocommerce_currency_position = get_option( 'woocommerce_currency_pos', 'left' );
			$prices                        = Advanced_Ads_Selling_Plugin::get_prices( $post->ID );
			$reverse_prices                = array_reverse( $prices, true ); // Reverse array preserving keys
			$get_prices                    = array();

			foreach ( $reverse_prices as $reverse_price ) {
				$get_prices[] = $reverse_price;
			}

			// add js for check code in public
			wp_enqueue_script( 'advanced-ads-selling-single-product-script' );

			wp_localize_script( 'advanced-ads-selling-single-product-script', 'AdvancedAdSelling', array(
				'ajaxurl'                       => admin_url( 'admin-ajax.php', ( is_ssl() ? 'https' : 'http' ) ),
				'product_prices'                => $get_prices,
				'woocommerce_price_decimal_sep' => $woocommerce_price_decimal_sep,
				'woocommerce_currency_position' => $woocommerce_currency_position,
			) );
		}

		// load on setup page
		$options        = Advanced_Ads_Selling_Plugin::get_instance()->options();
		$public_page_id = ( isset( $options['setup-page-id'] ) && $options['setup-page-id'] ) ? absint( $options['setup-page-id'] ) : false;
		if ( $public_page_id && isset( $post->ID ) && $post->ID === $public_page_id ) {
			wp_enqueue_script( 'advanced-ads-selling-single-product-script' );
			wp_localize_script( 'advanced-ads-selling-single-product-script', 'AdvancedAdSelling', array(
				'maxFileSize' => apply_filters( 'advanced-ads-selling-upload-file-size', 1048576 ),
			) );
		}

		$options = Advanced_Ads_Selling_Plugin::get_instance()->options();
		if ( isset( $options['wc-fixes'] ) && $options['wc-fixes'] ) {
			wp_enqueue_style( 'advanced-ads-selling-wc-fixes', AASA_BASE_URL . 'public/assets/css/wc-fixes.css', array( 'woocommerce-layout' ), AASA_VERSION );
		}
	}

	/**
	 * Load actions and filters
	 */
	public function wp_plugins_loaded() {
		if ( ! class_exists( 'WooCommerce', false ) ) {
			return;
		}

		add_filter( 'advanced-ads-can-inject-into-content', array( $this, 'prevent_ads_inject_into_woo_content' ), 10, 2 );
		add_action( 'woocommerce_thankyou', array( $this, 'display_ads_setup_data' ), 10, 1 );
		add_action( 'woocommerce_view_order', array( $this, 'display_ads_setup_data' ), 10, 1 );
		add_action( 'woocommerce_advanced_ad_add_to_cart', array( $this, 'add_to_cart_template' ) );

		// apply WooCommerce fixes
		$options = Advanced_Ads_Selling_Plugin::get_instance()->options();
		if ( isset( $options['wc-fixes'] ) && $options['wc-fixes'] ) {
			// Remove image from product pages
			remove_action( 'woocommerce_before_single_product_summary', 'woocommerce_show_product_images', 20 );
			// Remove sale badge from product page
			remove_action( 'woocommerce_before_single_product_summary', 'woocommerce_show_product_sale_flash', 10 );
			// Remove product thumbnail from the cart page
			add_filter( 'woocommerce_cart_item_thumbnail', '__return_empty_string' );
			// Remove product images from the shop loop
			remove_action( 'woocommerce_before_shop_loop_item_title', 'woocommerce_template_loop_product_thumbnail', 10 );
			// Remove sale badges from the shop loop
			remove_action( 'woocommerce_before_shop_loop_item_title', 'woocommerce_show_product_loop_sale_flash', 10 );
		}
	}

	/**
	 * Load template for add-to-cart with the correct filter for the fields
	 */
	public function add_to_cart_template() {
		$post_id = get_the_ID();

		$prices     = Advanced_Ads_Selling_Plugin::get_prices( $post_id );
		$ad_types   = get_post_meta( $post_id, '_ad_types', true );
		$sales_type = get_post_meta( $post_id, '_ad_sales_type', true );
		// reset sales type, when Tracking is not enabled
		if ( in_array( $sales_type, array( 'impressions', 'clicks' ) ) && ! defined( 'AAT_VERSION' ) ) {
			$sales_type = 'flat';
		}

		$ad_types_raw = Advanced_Ads::get_instance()->ad_types;

		if ( $placements = get_post_meta( $post_id, '_ad_placements', true ) ) {
			// load all placements
			$model          = Advanced_Ads::get_instance()->get_model();
			$placements_raw = $model->get_ad_placements_array();
		} else {
			$placements = array();
		}

		require AASA_BASE_PATH . 'public/views/product-template.php';
	}

	/**
	 *  Load ad setup page, if we are on the right url
	 */
	public function load_ad_setup_page() {
		if ( is_admin() || ! class_exists( 'WooCommerce', false ) ) {
			return;
		}

		$page_hash = $this->get_page_hash_from_setup_url();

		// display the page if the hash is correct
		if ( $page_hash ) {

			// check if there is another page selected as the ad setup page and forward to it
			$options        = Advanced_Ads_Selling_Plugin::get_instance()->options();
			$public_page_id = ( isset( $options['setup-page-id'] ) && $options['setup-page-id'] ) ? absint( $options['setup-page-id'] ) : false;

			if ( $public_page_id && get_post( $public_page_id ) ) {
				$setup_page_url = Advanced_Ads_Selling_Plugin::get_instance()->get_ad_setup_url( $page_hash );
				wp_redirect( $setup_page_url );
				die();
			}

			$order_id = $this->hash_to_order_id( $page_hash );

			// load the order
			$order = new WC_Order( $order_id );
			$items = $order->get_items();

			if ( false !== $order_id ) {
				require_once AASA_BASE_PATH . 'public/views/ad-setup-page.php';
				die;
			}
		}
	}

	/**
	 * Load ad setup form into custom page in the page content
	 */
	public function display_setup_form( $content ) {
		if ( ! class_exists( 'WooCommerce', false ) || doing_action( 'wp_head' ) ) {
			return $content;
		}

		$page_hash = $this->get_page_hash_from_setup_url();

		if ( $page_hash ) {
			$order_id = $this->hash_to_order_id( $page_hash );

			// load the order
			$order = new WC_Order( $order_id );
			$items = $order->get_items();

			if ( false !== $order_id ) {
				ob_start();

				require_once AASA_BASE_PATH . 'public/views/ad-setup-form.php';

				if ( defined( 'ADVANCED_ADS_SELLING_SHOW_SETUP_FORM_AFTER_CONTENT' ) ) {
					$content .= ob_get_clean();
				} else {
					$content = ob_get_clean() . $content;
				}
			}
		} elseif ( $this->is_setup_page() ) {
			$content .= '<p>' . __( 'The ad setup form is only visible through the link in the purchase confirmation email or account.', 'advanced-ads-selling' ) . '</p>';
		}

		return $content;
	}

	/**
	 * Get order for a setup page
	 *
	 * @return false|str
	 */
	public function get_page_hash_from_setup_url( $type = 'page' ) {

		// check if this page has the hash as a get parameter
		$page_hash = false;

		if ( isset( $_GET['h'] ) && $this->is_setup_page( get_the_ID() ) ) {
			return esc_attr( $_GET['h'] );
		} else {
			$protocol = 'http';
			if ( is_ssl() ) {
				$protocol .= 's';
			}
			$protocol .= '://';

			$full_url = $protocol . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];

			// use $site_url if this causes problems with WP installations in subdirectories
			$site_url = home_url();

			$sub1 = substr( $full_url, strlen( $site_url ) );

			if ( 0 === strpos( $sub1, '/' . Advanced_Ads_Selling_Plugin::AD_STORE_SLUG . '/' ) ) {
				$expl      = explode( '/', $sub1 );
				$page_hash = $expl[2];
			}
		}

		return $page_hash;
	}

	/**
	 * Check if the current page is the ad setup page
	 * according to the Settings under Advanced Ads > Settings > Selling Ads
	 *
	 * @param integer $post_id WP_Post ID.
	 * @return bool true if the current post is the setup page
	 */
	public function is_setup_page( $post_id = 0 ) {
		if ( ! $post_id ) {
			$post_id = get_the_ID();
		}

		if ( ! $post_id ) {
			return false;
		}

		// check if this is the ad setup page
		$options        = Advanced_Ads_Selling_Plugin::get_instance()->options();
		$public_page_id = (int) ( isset( $options['setup-page-id'] ) && $options['setup-page-id'] ) ? absint( $options['setup-page-id'] ) : false;

		return $public_page_id && $public_page_id === $post_id;
	}

	/**
	 * Prevent Ads from woocommerce content
	 */
	public function prevent_ads_inject_into_woo_content( $flag, $content ) {
		if ( ! defined( 'ADVANCED_ADS_SELLING_ALLOW_WC_PAGE_INJECTIONS' ) && $this->is_woocommerce_page() ) {
			$flag = false;
		}
		return $flag;
	}

	/**
	 * Prevent Ads from woocommerce pages
	 */
	public function prevent_ads_inject_into_woo_pages( $flag, $options ) {
		if ( ! defined( 'ADVANCED_ADS_SELLING_ALLOW_WC_PAGE_INJECTIONS' ) && $this->is_woocommerce_page() ) {
			$flag = false;
		}

		return $flag;
	}

	/**
	 * Display ads setup data
	 */
	public function display_ads_setup_data( $orderid ) {

		// check, if the link should be displayed to the client at all
		if ( Advanced_Ads_Selling_Plugin::hide_ad_setup() ) {
			return;
		}

		$hash = get_post_meta( $orderid, 'advanced_ads_selling_setup_hash', true );

		if ( $hash ) {
			$setup_url = Advanced_Ads_Selling_Plugin::get_instance()->get_ad_setup_url( $hash );
			printf( __( 'You can manage the content of your ads on the <a href="%s">ad setup page</a>.', 'advanced-ads-selling' ), $setup_url );
		}
	}

	/**
	 * Check is woocommerce page
	 */
	public function is_woocommerce_page() {
		$flag = false;
		if ( is_shop() || is_product_taxonomy() || is_product() || is_cart() || is_checkout() || is_account_page() || $this->is_setup_page() ) {
			$flag = true;
		}
		return $flag;
	}

	/**
	 * Display ads setup data in order confirmation email
	 */
	public function display_ad_link( $order, $sent_to_admin, $plain_text, $email ) {

		// Display Add link in email

		global $woocommerce;
		if ( version_compare( $woocommerce->version, '3.0', '>=' ) ) {
			$order_id = $order->get_id();
		} else {
			$order_id = $order->id;
		}

		$this->display_ads_setup_data( $order_id );
	}

	/**
	 * Manipulate the price html output adding a unique class if in the loop
	 *
	 * @param type $price_html
	 * @param type $product
	 */
	public function manipulare_price_html( $price_html, $product ) {
		global $wp_query;

		// change price only on single pages of the current product
		$product_type = $product->get_type();
		if ( isset( $product_type ) && 'advanced_ad' === $product_type && in_the_loop() && is_single()
			&& $wp_query->queried_object_id === $product->get_id() ) {

			// add another class
			$pattern = '/woocommerce-Price-amount/';
			return preg_replace( $pattern, 'woocommerce-Price-amount woocommerce-ad-price', $price_html );
		} else {
			return $price_html;
		}
	}

	/**
	 *  Get order ID from the page hash
	 */
	protected function hash_to_order_id( $hash ) {
		$args = array(
			'post_type'      => 'shop_order',
			'post_status'    => 'any',
			'posts_per_page' => 1,
			'fields'         => 'ids',
			'meta_query'     => array(
				array(
					'key'   => 'advanced_ads_selling_setup_hash',
					'value' => $hash,
				),
			),
		);

		$query = new WP_Query( $args );

		return isset( $query->posts[0] ) ? $query->posts[0] : false;
	}

	/**
	 * Save ad content sent from backend
	 */
	public function save_ad_content() {

		// If $_POST['aas_upload_ad'] is set
		if ( ! empty( $_POST['advanced-ads-selling-upload-ad'] ) && $_POST['advanced-ads-selling-upload-ad'] == 'advanced-ads-selling-upload-ad' ) {
			$data = array(); // Declare variables
			switch ( $_POST['advads_selling_ad_type'] ) { // Switch case on ad_type selected
				case 'image':
					$errors     = ''; // Declare variables
					$file_name  = $_FILES['advads_selling_ad_image']['name']; // Get file name
					$file_size  = $_FILES['advads_selling_ad_image']['size']; // Get file size
					$file_tmp   = $_FILES['advads_selling_ad_image']['tmp_name']; // Get file's temporary name
					$file_type  = $_FILES['advads_selling_ad_image']['type']; // Get file type
					$target_url = ! empty( $_POST['advads_selling_ad_url'] ) ? $_POST['advads_selling_ad_url'] : '';

					$file_datas = explode( '.', $file_name ); // Explode file name to retrieve extension
					foreach ( $file_datas as $file_data ) {
						$file_data_arr[] = $file_data; // Convert associative array to normal array
					}

					$file_ext   = strtolower( end( $file_data_arr ) ); // Get file extension
					$expensions = array( 'jpeg', 'jpg', 'png', 'gif' ); // Declare variables for allowed extension types

					if ( in_array( $file_ext, $expensions ) === false ) { // if file extensions is within allowed extensions
						$errors = esc_html__( 'Extension not allowed, please choose a JPEG, PNG or GIF file.', 'advanced-ads-selling' );
					}

					$max_file_size = apply_filters( 'advanced-ads-selling-upload-file-size', 1048576 );
					if ( $file_size > $max_file_size ) {
						$errors = sprintf(
							// translators: %s is a file size with one decimal
							__( 'The allowed file size is %s MB', 'advanced-ads-selling' ),
							number_format_i18n( $max_file_size / 1000000, 1 )
						);
					}

					if ( empty( $errors ) ) {

						// Get the path to the upload directory.
						$wp_upload_dir = wp_upload_dir();

						// These files need to be included as dependencies when on the front end.
						require_once ABSPATH . 'wp-admin/includes/image.php';
						require_once ABSPATH . 'wp-admin/includes/file.php';
						require_once ABSPATH . 'wp-admin/includes/media.php';

						// Insert the attachment.
						$attach_id = media_handle_upload( 'advads_selling_ad_image', 0 );
						$post_guid = get_the_guid( $attach_id );

						$ad_id           = Advanced_Ads_Selling_Order::order_item_id_to_ad_id( $_POST['advads_selling_order_item'] );
						$ad_post_content = '<img src="' . $post_guid . '" alt="' . $file_name . '" />';
						/*
						if( !empty( $target_url ) ) {//check when target url then wrap link with them
							$ad_post_content	= sprintf( '<a href="%s" target="_blank">%s</a>', $target_url, $ad_post_content );
						}*/

						// get ad object
						$ad = new Advanced_Ads_Ad( $ad_id );

						$ad->type = 'image';

						$output['image_id'] = $attach_id;

						$ad->set_option( 'output', $output );

						$ad->url = esc_url( $_POST['advads_selling_ad_url'] );

						// double check if we can use fopen
						/*
						if ( !empty ( $post_guid ) && ini_get('allow_url_fopen') && function_exists( 'getimagesize' ) ) {
							$image_size = getimagesize( $post_guid );

							$ad->width  = $image_size[0];
							$ad->height = $image_size[1];
						} else {
							$ad->width  = 0;
							$ad->height = 0;
						}*/

						$ad->content = $ad_post_content;
						$ad->status  = 'pending';

						if ( $attach_id ) {
							$attachment_meta = wp_get_attachment_metadata( $attach_id );
							$all_posts_id    = get_post_meta( $attach_id, '_advanced-ads_parent_id' );

							if ( ! in_array( $ad_id, $all_posts_id ) ) {
								add_post_meta( $attach_id, '_advanced-ads_parent_id', $ad_id, false );
							}
						}

						$ad->width  = isset( $attachment_meta['width'] ) ? absint( $attachment_meta['width'] ) : 0;
						$ad->height = isset( $attachment_meta['height'] ) ? absint( $attachment_meta['height'] ) : 0;

						// update the ad post
						$new_ad_content = array(
							'ID'          => $ad_id,
							'post_status' => 'pending',
						);

						$return = wp_update_post( $new_ad_content );

						$ad->save();

						$_POST['success'] = 'success';
					} else {
						$_POST['errors'] = $errors;
					}

					break;

				case 'plain':
					if ( ! isset( $_POST['advads_selling_ad_content'] ) || ! trim( $_POST['advads_selling_ad_content'] ) ) {
						$errors = esc_html__( 'Ad content missing.', 'advanced-ads-selling' );
					}

					if ( empty( $errors ) ) {
					$ad_id = Advanced_Ads_Selling_Order::order_item_id_to_ad_id( $_POST['advads_selling_order_item'] );

					// update the ad post
					$new_ad_content = array(
						'ID'           => $ad_id,
						'post_content' => trim( $_POST['advads_selling_ad_content'] ),
						'post_status'  => 'pending',
					);

					$return = wp_update_post( $new_ad_content );
					if ( is_wp_error( $return ) ) {
							die( esc_html__( 'Error when submitting the ad. Please contact the site admin.', 'advanced-ads-selling' ) );
						}

						$_POST['success'] = 'success';
					} else {
						$_POST['errors'] = $errors;
					}
			}

			/**
			 * Allow add-ons to add their own logic for another custom ad type
			 */
			do_action( 'advanced-ads-selling-save-ad-content-after', $_POST );
		}
	}

Thank you in advance!


Viewing all articles
Browse latest Browse all 59525

Trending Articles