wordpress pre_get_posts隐藏包含字符串

时间:2018-01-12 12:28:26

标签: wordpress posts

我正试图从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”没有比较选项。这是对的吗?

这周围有变化吗?

1 个答案:

答案 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 );

但如果您拥有该产品的直接链接,它仍然可以访问