Woocommerce 产品短代码每页仅显示两个产品

时间:2021-04-13 11:14:34

标签: php wordpress woocommerce e-commerce

我正在建立带有店面子主题的 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,类别页面仍然只显示两个产品...

2 个答案:

答案 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 被某些内容覆盖了。