簡體   English   中英

從產品類別和自定義meta_key對Woocommerce產品進行排序

[英]Sort Woocommerce Products from a product category and custom meta_key

我使用自定義插件(和meta_key)成功按喜歡(計數)過濾了我所有的Wordpress帖子,這也使我可以過濾類別中最喜歡的帖子。 我在自定義頁面模板中顯示(查詢)結果。 一切正常。

Like功能在Woocommerce產品上也適用。 但是到目前為止,我還無法建立一個頁面,在該頁面中,我對商品(post_type)進行分類的方式與我對帖子所做的處理方式相同。 我最接近的是在頁面上顯示最喜歡的帖子,但是類別的排序不會過濾帖子-它顯示的內容與主頁相同。 類別列表和類別鏈接的url調用工作正常。

注意: url查詢字符串“ product-cato”是自定義的-使用ajax過濾器插件的即時消息將使用此查詢字符串和類別ID,例如.../?product-cato=6請不要混淆例如wicht 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>
    } 
?>

由於產品類別自定義分類法 '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'是正確 product-cato同時還要使用product-cato

如果sanitize_text_field($_GET['product_cat'])不是產品類別“ slug” ,則您需要使用正確的字段類型( 'name''slug' )更改'field' => 'term_id',

因此,您的代碼應該是(正確定義'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']),
            ),
        ),
    ) );
}

它應該工作……

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM