通过短代码获取 Woocommerce 产品标签 post 计数

Get Woocommerce product tag post count via a shortcode

我需要计算“产品标签”在整个网站上的使用次数。每个产品都有许多与之关联的标签。

我想过创建一个短代码,然后在需要时可以引用它。我在下面创建的短代码使网站崩溃。

// function 
function tag_count_shortcode() { 
 
// Identify the tag ID and then run a count. 
$term = get_tag( $tag_ID );
$count = $term->count; 
 
// Output the total number of times a tag is used
return $count;
} 
// register shortcode
add_shortcode('tagcount', 'tag_count_shortcode'); 

我不确定我哪里做错了。非常感谢任何帮助。

平台:WordPress | 文件代码:“Functions.php”

干杯

这是关于产品标签,它是 WooCommerce 自定义分类而不是 WordPress 标签。

另外一个产品可以有多个产品标签,所以下面的代码将处理第一个产品标签词的计数。此短代码还处理一些参数:

  • taxonomy(也可以处理任何自定义分类、WordPress 标签和类别)- 默认:产品标签
  • term_id(可以处理任何定义的术语 ID)- 默认情况下,它在单个产品页面上获取术语
  • post_id - 默认为当前产品ID

代码:

function term_count_shortcode( $atts ) {
    extract( shortcode_atts( array(
        'taxonomy'  => 'product_tag', // Product tag taxonomy (by default)
        'term_id' => 0,
        'post_id' => get_queried_object_id(), // The current post ID
    ), $atts ) );

    // For a defined term ID
    if( $term_id > 0 ) {
        // Get the WP_term object
        $term = get_term_by( 'id', $term_id, $taxonomy );

        if( is_a( $term, 'WP_Term' ) )
            $count = $term->count;
        else
            $count = 0;
    }
    // On product single pages
    elseif ( is_product() && $term_id == 0 && $post_id > 0 ) {
        // Get the product tag post terms
        $terms = get_the_terms( $post_id, $taxonomy );
        // Get the first term in the array
        $term  = is_array($terms) ? reset( $terms ) : '';

        if( is_a( $term, 'WP_Term' ) )
            $count = $term->count;
        else
            $count = 0;
    } else {
        $count = false;
    }
    return $count;
}
add_shortcode('term_count', 'term_count_shortcode');

代码进入您的活动子主题(或活动主题)的 function.php 文件。已测试并有效。


用法:

1). 基本用法: 从产品单页显示第一个产品标签计数:[term_count]

2). 带参数的用法:

  • 具有定义的术语 ID:[term_count term_id="58"]

  • 具有定义的术语 ID 和分类法:[term_count term_id="15" taxonomy="product_cat"]

  • 具有定义的术语 ID 和 post ID:[term_count term_id="15" post_id="37"]