我正在建立带有店面子主题的 WooCommerce 商店。在我的商店页面 (archive-product.php
) 中,我使用以下代码显示产品:
<?php
$filterArray = explode("/", "http://" . $_SERVER[HTTP_HOST] . $_SERVER[REQUEST_URI]);
if(count($filterArray)>5) {
echo do_shortcode('[products category="' . $filterArray[count($filterArray)-2] . '" per_page="30" limit="30" columns="3" paginate="true"]');
}
else {
echo do_shortcode('[products per_page="30" limit="30" columns="3" paginate=true]');
}
?>
当我没有将 category
属性传递给简码时,一切都按预期进行。但是当我添加 category
时,我的页面显示的不是 30 个,而是每页仅显示 2 个产品。将 products
更改为 product category
根本不起作用。这种奇怪的行为可能是什么原因?
编辑:我的代码有些混乱,在 functions.php
中发现了以下函数:
function modify_product_cat_query( $query ) {
if (!is_admin() && $query->is_tax("product_cat")){
$query->set('posts_per_page', 2);
}
}
add_action( 'pre_get_posts', 'modify_product_cat_query' );
我以为我终于找到了问题,但是即使我删除了那个sinppet或将值从2更改为30,类别页面仍然只显示两个产品...
答案 0 :(得分:1)
您可以使用 woocommerce_product_query
更改 posts_per_page
。检查下面的代码。
add_action( 'woocommerce_product_query', 'change_posts_per_page', 999 );
function change_posts_per_page( $query ) {
if( is_admin() )
return;
$query->set( 'posts_per_page', 30);
}
答案 1 :(得分:1)
试试用这个。您在存档页面上,因此更容易获得当前术语。您不必从 url 中获取它。
$term = get_queried_object();
if( !empty( $term ) && !is_wp_error( $term ) ) {
echo do_shortcode('[products category="' . $term->slug . '" per_page="6" limit="30" columns="3" paginate="true"]');
} else {
echo do_shortcode('[products per_page="30" limit="30" columns="3" paginate=true]');
}
您所面临的产品显示的问题不超过 2 个,这可能是因为 post_per_page 被某些内容覆盖了。