wc_render_invalid_variation_notice()WC 3.6.0

Shows a notice if variations are missing prices.

Return

null. Nothing (null).

Usage

wc_render_invalid_variation_notice( $product_object );
$product_object(WC_Product) (required)
Product object.

Changelog

Since 3.6.0 Introduced.

wc_render_invalid_variation_notice() code WC 8.7.0

<?php
function wc_render_invalid_variation_notice( $product_object ) {
	global $wpdb;

	// Give ability for extensions to hide this notice.
	/* phpcs:disable WooCommerce.Commenting.CommentHooks.MissingHookComment */
	if ( ! apply_filters( 'woocommerce_show_invalid_variations_notice', true, $product_object ) ) {
		return;
	}
	/* phpcs: enable */

	$variation_ids = $product_object ? $product_object->get_children() : array();

	if ( empty( $variation_ids ) ) {
		return;
	}

	$variation_count = count( $variation_ids );

	// Check if a variation exists without pricing data.
	// phpcs:disable WordPress.DB.PreparedSQL.NotPrepared
	$valid_variation_count = $wpdb->get_var(
		"
		SELECT count(post_id) FROM {$wpdb->postmeta}
		WHERE post_id in (" . implode( ',', array_map( 'absint', $variation_ids ) ) . ")
		AND ( meta_key='_subscription_sign_up_fee' OR meta_key='_price' )
		AND meta_value >= 0
		AND meta_value != ''
		"
	);
	// phpcs:enable WordPress.DB.PreparedSQL.NotPrepared

	$invalid_variation_count = $variation_count - $valid_variation_count;

	if ( 0 < $invalid_variation_count ) {
		?>
		<div id="message" class="inline notice notice-warning woocommerce-message woocommerce-notice-invalid-variation">
			<p>
			<?php
			echo wp_kses_post(
				sprintf(
					/* Translators: %d variation count. */
					_n( '%d variation does not have a price.', '%d variations do not have prices.', $invalid_variation_count, 'woocommerce' ),
					$invalid_variation_count
				) . '&nbsp;' .
				__( 'Variations (and their attributes) that do not have prices will not be shown in your store.', 'woocommerce' )
			);
			?>
			</p>
			<div class="woocommerce-add-variation-price-container">
				<button type="button" class="button add_price_for_variations"><?php esc_html_e( 'Add price', 'woocommerce' ); ?></button>
			</div>
		</div>
		<?php
	}
}