Php 在Woocommerce短代码上更改产品元查询

Php 在Woocommerce短代码上更改产品元查询,php,wordpress,woocommerce,shortcode,hook-woocommerce,Php,Wordpress,Woocommerce,Shortcode,Hook Woocommerce,我在一家woocommerce商店工作,在那里我必须展示位置定制价值的产品。产品属于任何位置。我已经完成了将近50%的插件,商店页面上的产品都得到了完美的过滤,但功能产品、销售产品、最近的产品等都没有得到过滤,因为它们是由woocommerce产品短代码生成的 到现在为止,我在管理产品页面中添加了一个自定义文件,并在商店页面的前端显示过滤器产品。现在我想从shortcode中筛选产品 我在管理站点的产品信息页面中添加了自定义文件,下面是代码: /* adding custom product f

我在一家woocommerce商店工作,在那里我必须展示位置定制价值的产品。产品属于任何位置。我已经完成了将近50%的插件,商店页面上的产品都得到了完美的过滤,但功能产品、销售产品、最近的产品等都没有得到过滤,因为它们是由woocommerce产品短代码生成的

到现在为止,我在管理产品页面中添加了一个自定义文件,并在商店页面的前端显示过滤器产品。现在我想从shortcode中筛选产品

我在管理站点的产品信息页面中添加了自定义文件,下面是代码:

/* adding custom product field: location */ 
function add_custom_product_text_filed(){
global $woocommerce, $post;

$locatons = array('all' => 'All');
$locations_posts = get_posts(array('post_type' => 'location', 'numberposts' => -1));
foreach ($locations_posts as $loc_post) {
    $locatons[$loc_post->ID] = $loc_post->post_title;
}

echo '<div class="options_group">';

woocommerce_wp_select(
    array(
        'id' => '_location',
        'label' => __('Location'),
        'desc_tip' => true,
        'description'   => __('Enter the product location here'),
        'options' => $locatons,
    )
);
echo '</div>';
}
现在我想根据位置自定义字段更改woocommerce产品短代码(销售产品、功能产品、最近的产品等)的工作方式,因为PageBulider使用短代码显示产品,但我不知道如何更改短代码功能。是否有任何钩子或过滤器来完成此任务,或者有任何示例给出如何完成此任务的想法。非常感谢你的帮助。
谢谢。

以下代码使用
woocommerce\u快捷码\u产品\u查询
专用过滤器挂钩允许更改woocommerce快捷码上的产品查询:

add_filter( 'woocommerce_shortcode_products_query', 'shortcode_products_query_on_location', 10, 3 );
function shortcode_products_query_on_location( $query_args, $atts, $loop_name ){
    if (isset($_COOKIE['wc_location_product_id']) && !empty($_COOKIE['wc_location_product_id']) && !is_null($_COOKIE['wc_location_product_id']) && $_COOKIE['wc_location_product_id'] != 'all') {

        $query_args['meta_query'] = array( array(
            'key'     => '_location',
            'value'   => $_COOKIE['wc_location_product_id'],
            'compare' => '=',
        ) );
    }
    return $query_args;
}
代码进入活动子主题(或活动主题)的function.php文件。它应该会起作用

add_filter( 'woocommerce_shortcode_products_query', 'shortcode_products_query_on_location', 10, 3 );
function shortcode_products_query_on_location( $query_args, $atts, $loop_name ){
    if (isset($_COOKIE['wc_location_product_id']) && !empty($_COOKIE['wc_location_product_id']) && !is_null($_COOKIE['wc_location_product_id']) && $_COOKIE['wc_location_product_id'] != 'all') {

        $query_args['meta_query'] = array( array(
            'key'     => '_location',
            'value'   => $_COOKIE['wc_location_product_id'],
            'compare' => '=',
        ) );
    }
    return $query_args;
}