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'
测试了代码,让它工作, 并且代码适用于它。
我是 PHP 和 WordPress 的新手,所以我的问题很可能很愚蠢。虽然我发现其他人有类似的问题。
在我的主页 (index.php) 上,我想排除某个类别的产品。我发现应该可以使用 category__not_in 作为传递给 $args var 的参数。但此选项不起作用。当我更改 $args var 中的其他值时。他们被应用。 IE。如果我更改 post_per_page 它会立即可见。我使用下面的代码,只想排除类别 28(将来可能更多)。我尝试了
我想知道是否有人可以指出正确的方向。谢谢
<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'
测试了代码,让它工作, 并且代码适用于它。