从产品类别和自定义meta_key中对Woocommerce产品进行排序

问题描述 投票:1回答:1

我成功过滤所有我的Wordpress帖子Likes(count)与自定义插件(和meta_key)也让我过滤类别中最喜欢的帖子。我在自定义页面模板中显示(查询)结果。一切正常。

Like功能也适用于Woocommerce Products。但到目前为止,我无法设置一个页面,我在特定的商店cateogry中以与我的帖子相同的方式对产品(post_type)进行排序。我最接近的是在页面上显示最喜欢的帖子但是类别的排序不会过滤帖子 - 它显示与主页面相同。类别列表和cateogy链接的网址调用工作正常。

注意:url查询字符串“product-cato”是一个自定义的 - 我使用ajax过滤器插件使用这个查询字符串和类别id像.../?product-cato=6Please不要混合它与product_cat例如

这就是我到目前为止所提出的 - 从帖子的代码开始(工作正常)。不知道如何解决这个问题?谢谢

查询(工作正常)

if (isset($_GET['category'])) {
    $args = array(
    'meta_key' => '_recoed',
    'meta_compare' => '>',
    'meta_value' => '0',
    'orderby' => 'meta_value_num',
    'order' => 'DESC',
    'category_name' => sanitize_text_field($_GET['category']),
    'paged' => $paged
    );
} 

 query_posts($args);

用于过滤每个类别中的帖子的类别列表(工作正常)

<?php $categories = get_categories();

foreach($categories as $category) { ?>
    <li>
        <a class="popular-categories" href="<?php echo get_permalink(); ?>?category=<?php echo $category->category_nicename; ?>"><?php echo $category->name; ?></a> 
    </li>
<?php } ?>

现在Woocommerce查询和类别部分我被卡住了

产品查询post_type

    if (isset($_GET['product-cato'])) {
    $args = array(
    'meta_key' => '_recoed',
    'meta_compare' => '>',
    'meta_value' => '0',
    'post_type' => 'product',
    'orderby' => 'meta_value_num',
    'order' => 'DESC',
    'taxonomy' => sanitize_text_field($_GET['product_cat']),
    'paged' => $paged
);

query_posts($args);

用于过滤每个商店类别中的帖子的类别列表

<?php
    $product_categories = get_terms( 'product_cat' );
    $count = count($product_categories);

    foreach ( $product_categories as $product_category ) { ?>
        <li>
            <a class="popular-categories" href="<?php echo get_permalink(); ?>?product-cato=<?php echo $product_category->term_id; ?>"><?php echo $product_category->name; ?></a>
        </li>
    } 
?>
php wordpress woocommerce product custom-taxonomy
1个回答
2
投票

由于产品类别是自定义分类'product_cat',请使用tax_query代替。

所以不是错的:

'taxonomy' => sanitize_text_field($_GET['product_cat'])

...使用它(正确定义'field'参数):

'tax_query' => array( // the product category query
    array( 
        'taxonomy' => 'product_cat',
        'field'    => 'term_id', // (also 'name' or 'slug')  <==   <==   <==   <==   <== 
        'terms'    => sanitize_text_field($_GET['product-cato']),
    ),
),

同时检查sanitize_text_field($_GET['product_cat']) 'product_cat'是正确的slug,因为你也使用product-cato ...

如果sanitize_text_field($_GET['product_cat'])不是产品类别“slug”,则应该使用正确的字段类型('field' => 'term_id','name')更改'slug'

所以你的代码应该是(正确定义'field'参数):

if (isset($_GET['product-cato'])) {
    query_posts( array(
        'meta_key' => '_recoed',
        'meta_compare' => '>',
        'meta_value' => '0',
        'orderby' => 'meta_value_num',
        'order' => 'DESC',
        'paged' => $paged,
        'post_type' => 'product',
        //'posts_per_page' => 20,
        'post_status' => 'publish',
        // The product category query
        'tax_query' => array( 
            array( 
                'taxonomy' => 'product_cat',
                'field'    => 'term_id', // (also 'name' or 'slug') <==   <==   <==   <==
                'terms'    => sanitize_text_field($_GET['product-cato']),
            ),
        ),
    ) );
}

它应该工作......

© www.soinside.com 2019 - 2024. All rights reserved.