首页 > 解决方案 > 在 WooCommerce 产品类别页面循环中获取帖子计数

问题描述

我试图在我的产品类别页面循环(Woocommerce)中获取帖子计数,但它不起作用。有谁知道为什么?

Woocommerce 使用相同的文件 archive-product.php 来显示商店页面和产品类别页面。在我的 archive-product.php 中,我在循环开始之前使用 Woocommerce 函数将值传递给了一个变量:

do_action( 'woocommerce_before_shop_loop' );

$totalproducts = wc_get_loop_prop( 'total' );

woocommerce_product_loop_start();

if ( wc_get_loop_prop( 'total' ) ) {
    while ( have_posts() ) {
        the_post();
        wc_get_template_part( 'content', 'product') );
    }
}

woocommerce_product_loop_end();

在 content-product.php 中,我调用变量,然后使用它为每个帖子添加一个内联 z-index,并在每个帖子中减少它。

<?php global $totalproducts; ?>

<div class="product-item" style="z-index: <?php echo $totalproducts; ?>;">
   content of the post
</div>

<?php $totalproducts = $totalproducts - 1; ?>

对于商店页面,它可以完美运行,但对于产品类别页面,它不起作用,变量为空。如果我在我的 archive-product.php 中循环开始之前回显变量,它会显示类别中的帖子计数,因此它对两个页面都有效。但是我无法在循环中获取变量,特别是在类别页面中。有谁知道为什么会这样?

难道我做错了什么?

标签: phpwordpresswoocommercecountglobal

解决方案


也许使用全局变量$wp_query及其属性post_count,在您的代码中替换:

$totalproducts = wc_get_loop_prop( 'total' );

这样:

global $wp_query;

$totalproducts = wc_get_loop_prop( 'total' ) ? wc_get_loop_prop( 'total' ) : $wp_query->post_count;

它可以更好地工作。


您也可以简化这一行:

<?php $totalproducts = $totalproducts - 1; ?>

经过:

<?php $totalproducts--; ?>

推荐阅读