php – 在Woocommerce商店页面中过滤特定自定义元数据中的产品

我需要过滤WooCommerce商店页面,只想显示需要定制产品元数据的产品.这是我在archive-product.PHP中找到的:

/**
 * Hook: woocommerce_before_shop_loop.
 *
 * @hooked wc_print_notices - 10
 * @hooked woocommerce_result_count - 20
 * @hooked woocommerce_catalog_ordering - 30
 */
do_action( 'woocommerce_before_shop_loop' );
woocommerce_product_loop_start();
if ( wc_get_loop_prop( 'total' ) ) {
    while ( have_posts() ) {
        the_post();
        /**
         * Hook: woocommerce_shop_loop.
         *
         * @hooked WC_Structured_Data::generate_product_data() - 10
         */
        do_action( 'woocommerce_shop_loop' );
        wc_get_template_part( 'content', 'product' );
    }
}
woocommerce_product_loop_end();

那么如何在此部分中传递过滤器值以仅显示具有元键X和值Y的产品?

更新

我已经按照Loic说的方式尝试了但是当我检查多一个元值时,它会导致问题,我看不到任何产品:

add_filter( 'woocommerce_product_query_Meta_query', 'show_only_products_with_specific_Metakey', 10, 2 );
function show_only_products_with_specific_Metakey( $Meta_query, $query ) {
    // Only on shop pages
    if( ! is_shop() ) return $Meta_query;

    $Meta_query[] = array(
        'key'     => '_the_Meta_key',
        'value'   => 'the_value',
        'compare' => 'EXIST'
    );

    //Don't works when adding the second one
    $Meta_query[] = array(
        'key'     => '_the_Meta_key',
        'value'   => 'the_value_2',
        'compare' => 'EXIST'
    );


    return $Meta_query;
};

我有两个产品:

>产品A – >有the_value_2
>产品B – >有the_value

所以我期待这两款产品.当我删除第二个Meta_query时,我只获得了产品B.

解决方法:

您可以使用挂钩在woocommerce_product_query_Meta_query过滤器挂钩中的自定义函数,您可以使用目标Meta_key替换下面代码中的_the_Meta_key:

add_filter( 'woocommerce_product_query_Meta_query', 'show_only_products_with_specific_Metakey', 10, 2 );
function show_only_products_with_specific_Metakey( $Meta_query, $query ) {
    // Only on shop pages
    if( ! is_shop() ) return $Meta_query;

    $Meta_query[] = array(
        'key'     => '_the_Meta_key',
        'compare' => 'EXIST'
    );
    return $Meta_query;
}

代码位于活动子主题(或活动主题)的function.PHP文件中.经过测试和工作.

添加(与您上次评论相关):

要使其适用于多个元值,您需要使用’compare’=> ‘IN’,如:

add_filter( 'woocommerce_product_query_Meta_query', 'show_only_products_with_specific_Metakey', 10, 2 );
function show_only_products_with_specific_Metakey( $Meta_query, $query ) {
    // Only on shop pages
    if( ! is_shop() ) return $Meta_query;

    $Meta_query[] = array(
        'key'     => '_the_Meta_key',
        'value'     => array('L','XL'),
        'compare' => 'IN'
    );
    return $Meta_query;
}

代码位于活动子主题(或活动主题)的function.PHP文件中.经过测试和工作.

WP meta_query documentation

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...