Woocommerce模板的index.php中的category__not_in不起作用

时间:2018-05-23 11:26:05

标签: php wordpress woocommerce product custom-taxonomy

我是PHP和WordPress的新手,所以我的问题可能很容易愚蠢。虽然我发现其他人有类似的问题。

在我的主页(index.php)上,我想排除某个类别的产品。我发现应该可以使用category__not_in作为传递给$ args var的参数。但是这个选项不起作用。当我更改$ args var中的其他值时。它们被应用了。即如果我更改post_per_page,它立即可见。我使用下面的代码,只想排除类别28(将来可能更多)。我尝试了stackoverflow中提到的解决方案,但没有成功。甲

我想知道是否有人能指出我正确的方向。感谢

<section id="content">
<div class="container woocommerce">

    <?php
    remove_action( 'woocommerce_before_shop_loop_item_title', 'woocommerce_template_loop_product_thumbnail', 10 );

    global $woocommerce_loop, $woocommerce;
    $meta_query = $woocommerce->query->get_meta_query();
    $args = array(
        'post_type' => 'product',
        'post_status' => 'publish',     
        'category__not_in' => array( 28 ),
        'ignore_sticky_posts'   => 1,
        'post__not_in' => $slider_arr,
        'posts_per_page' => 9, 
        'paged' => ( get_query_var('paged') ? get_query_var('paged') : 1),

    );  

    $products = new WP_Query( $args );
    //query_posts( $args );

        if ( $products->have_posts() ) : $x = 0; ?>

            <div id="posts_cont">

                <?php while ( $products->have_posts() ) : $products->the_post(); ?>         
                    <?php woocommerce_get_template_part( 'content', 'product-home' ); ?>
                    <?php if ($x == 2) { echo '<div class="home_small_box clear"></div>'; $x = -1; } ?>

                <?php $x++; endwhile; // end of the loop. ?>

            </div><!--//posts_cont-->
        <?php //woocommerce_product_loop_end(); ?>

        <div class="load_more_cont">
            <div align="center"><div class="load_more_text">
            <?php
            ob_start();
            //next_posts_link('<img src="' . get_bloginfo('stylesheet_directory') . '/images/loading-button.png" />');
            next_posts_link('LOAD MORE PRODUCT');
            $buffer = ob_get_contents();
            ob_end_clean();
            if(!empty($buffer)) echo $buffer;
            ?>
            </div></div>
        </div><!--//load_more_cont-->                   
        <?php
        global $wp_query;
        //echo '**' . $wp_query->max_num_pages . '**';  
        $max_pages = $wp_query->max_num_pages;
        ?>          
        <div id="max_pages_id" style="display: none;"><?php echo ceil($wp_query->found_posts / 9); //echo $max_pages-1; ?></div>                    

    <?php endif;
    //wp_reset_query();
    wp_reset_postdata();    

?>              
    <div class="clear"></div>

</div><!--//container-->

1 个答案:

答案 0 :(得分:2)

  

category__not_in 仅适用于WordPress类别,但不适用于WC产品类别

您的代码中存在一些错误:

  • 产品类别自定义分类,因此您需要使用Tax Query代替。
  • 由于Woocommerce 3 woocommerce_get_template_part()已被弃用并被wc_get_template_part()
  • 取代 您应该在查询中使用
  • $meta_query ...
  • $slider_arr未定义 (因此我对其进行了评论)

所以试试这个:

<section id="content">
<div class="container woocommerce">

    <?php
    remove_action( 'woocommerce_before_shop_loop_item_title', 'woocommerce_template_loop_product_thumbnail', 10 );

    global $woocommerce_loop;

    $products = new WP_Query( array(
        'post_type'     => 'product',
        'post_status'   => 'publish',
        'tax_query'     => array( array(
            'taxonomy'  => 'product_cat',
            'field'     => 'term_id',
            'terms'     => array( 16 ),
            'operator'  => 'NOT IN',
        ) ),
        'meta_query'    => WC()->query->get_meta_query(),
        // 'post__not_in' => $slider_arr,
        'ignore_sticky_posts' => 1,
        'posts_per_page'      => 9,
        'paged' => ( get_query_var('paged') ? get_query_var('paged') : 1),

    ) );

    if ( $products->have_posts() ) : $x = 0; ?>

        <div id="posts_cont">

            <?php while ( $products->have_posts() ) : $products->the_post(); ?>
                <?php wc_get_template_part( 'content', 'product-home' ); ?>
                <?php if ($x == 2) { echo '<div class="home_small_box clear"></div>'; $x = -1; } ?>

            <?php $x++; endwhile; // end of the loop. ?>

        </div><!--//posts_cont-->
        <?php //woocommerce_product_loop_end(); ?>

        <div class="load_more_cont">
        <div align="center"><div class="load_more_text">
        <?php
        ob_start();
        //next_posts_link('<img src="' . get_bloginfo('stylesheet_directory') . '/images/loading-button.png" />');
        next_posts_link('LOAD MORE PRODUCT');
        $buffer = ob_get_contents();
        ob_end_clean();
        if(!empty($buffer)) echo $buffer;
        ?>
        </div></div>
        </div><!--//load_more_cont-->
        <?php
        global $wp_query;
        //echo '**' . $wp_query->max_num_pages . '**';
        $max_pages = $wp_query->max_num_pages;
        ?>
        <div id="max_pages_id" style="display: none;"><?php echo ceil($wp_query->found_posts / 9); //echo $max_pages-1; ?></div>

    <?php endif;
    //wp_reset_query();
    wp_reset_postdata();   

?>              
    <div class="clear"></div>

</div><!--//container-->

注意:我认为'product-home'是自定义产品模板,因此我使用默认'product'测试代码,以使其正常工作,和代码可以使用它。