category__not_in 在 index.php 的 Woocommerce 模板不工作

category__not_in in index.php of Woocommerce template not working

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

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

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

<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-->

category__not_in only work with WordPress categories, but not for WC Product categories

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

  • 产品类别是自定义分类法,因此您需要改用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' 测试了代码,让它工作, 并且代码适用于它。