我正试图从sku中包含字符串“-FOC”的前端隐藏一堆WooCommerce产品。以下是我尝试过的一些事情:
选项1不成功
add_filter( 'pre_get_posts', 'custom_pre_get_posts_query_1' );
function custom_pre_get_posts_query_1( $q ) {
if ( ! $q->is_main_query() ) return;
if ( ! $q->is_post_type_archive() ) return;
$meta_query = $q->get('meta_query');
$meta_query[] = array(
'key'=>'_sku',
'value' => '-FOC',
'compare' => 'LIKE',
);
$q->set('meta_query',$meta_query);
remove_filter( 'pre_get_posts', 'custom_pre_get_posts_query_1' );
}
选项2不成功
add_filter( 'pre_get_posts', 'custom_pre_get_posts_query_1' );
function custom_pre_get_posts_query_1( $q ) {
if ( ! $q->is_main_query() ) return;
if ( ! $q->is_post_type_archive() ) return;
$meta_query = $q->get('meta_query');
$meta_query[] = array(
'key'=>'_sku',
'value' => '[FOC$]',
'compare'=>'REGEX',
);
$q->set('meta_query',$meta_query);
remove_filter( 'pre_get_posts', 'custom_pre_get_posts_query_1' );
}
根据文档(https://codex.wordpress.org/Class_Reference/WP_Meta_Query),“CONTAINS”没有比较选项。这是对的吗?
这周围有变化吗?
答案 0 :(得分:0)
您可以使用NOT LIKE
比较选项。因此,要从产品列表中隐藏产品,您可以这样做:
function custom_pre_get_posts_query_1( $q, $instance ) {
$meta_query = $q->get('meta_query');
$meta_query[] = array(
'key'=>'_sku',
'value' => '-FOC',
'compare' => 'NOT LIKE',
);
$q->set('meta_query',$meta_query);
};
add_action( 'woocommerce_product_query', 'custom_pre_get_posts_query_1', 10, 2 );
但如果您拥有该产品的直接链接,它仍然可以访问