我是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-->
答案 0 :(得分:2)
category__not_in
仅适用于WordPress类别,但不适用于WC产品类别
您的代码中存在一些错误:
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'
测试代码,以使其正常工作,和代码可以使用它。