以下代码隐藏在 WooCommerce 存档页面、价格为零的产品或没有主图像的产品中:
add_action( 'woocommerce_product_query', 'custom_pre_get_posts_query' );
function custom_pre_get_posts_query( $query ) {
$meta_query = $query->get( 'meta_query' );
$meta_query[] = array(
'relation' => 'AND',
array(
'key' => '_thumbnail_id',
'value' => '0',
'compare' => '>',
),
array(
'key' => '_price',
'value' => '0',
'compare' => '>',
'type' => 'NUMERIC',
),
);
$query->set( 'meta_query', $meta_query );
}
但是当我在主页上放置一个小部件“产品”时,它会显示所有产品,即使价格为 0 或者如果它们没有主图像,这是我不想要的。 我尝试自己编写此代码,但没有成功。
我错过了什么?
首先,由于您仅对
meta_query
进行更改,因此 woocommerce_product_query
操作挂钩可以替换为 woocommerce_product_query_meta_query
过滤器挂钩…
然后您将能够对产品widget过滤器挂钩使用相同的功能代码(如果需要,甚至可以对产品短代码过滤器挂钩使用相同的功能代码。
替换代码(还处理产品小部件和短代码):
// For product archive pages (replacement hook and code)
add_filter( 'woocommerce_product_query_meta_query', 'filter_products_query_meta_query', 10, 1 );
// For products widget
add_filter( 'woocommerce_products_widget_query_args', 'filter_products_query_meta_query', 10, 1 );
// For products shortcode
add_filter( 'woocommerce_shortcode_products_query', 'filter_products_query_meta_query', 10, 1 );
function filter_products_query_meta_query( $query_args ) {
if( is_admin() ) {
return $query_args;
}
$query_args['meta_query'][] = array(
'relation' => 'AND',
array(
'key' => '_thumbnail_id',
'value' => '0',
'compare' => '>',
),
array(
'key' => '_price',
'value' => '0',
'compare' => '>',
'type' => 'NUMERIC',
),
);
return $query_args;
}
代码位于子主题的functions.php 文件中(或插件中)。已测试并有效。