WordPress双分类交集文章计数短代码插件修复咨询
修复方案
原代码存在以下核心问题导致功能异常:
- 插件头注释不符合WordPress规范,缺少起始注释标记,插件无法被系统正常识别加载
- 未解析短代码传入的
category参数,硬编码分类ID和分类法,无法通过短代码动态传参 - 分类匹配字段配置错误:短代码传入的是分类别名(slug),原代码配置为按
term_taxonomy_id匹配,无法命中对应分类 - 取数逻辑错误:
$query->post_count仅返回当前分页下的文章数,要获取全量匹配的文章总数需调用$query->found_posts - 短代码直接
echo输出内容,会导致显示位置错乱,WordPress短代码要求返回字符串而非直接输出 - 查询未做性能优化,默认拉取全量文章对象,资源消耗高
修复后完整代码
<?php /* Plugin Name: Count Posts Plugin URI: http://a4jp.com/plugins/ Description: 新增短代码统计同时归属两个指定分类的文章总数量 Version: 1.0 fixed License: GPLv2 */ function cat_count_multi( $atts ) { // 解析短代码入参,设置默认值 $atts = shortcode_atts( array( 'category' => '', // 默认统计系统自带文章分类,若为自定义分类法可修改此处值,也可通过短代码传参覆盖 'taxonomy' => 'category', ), $atts ); // 未传入分类参数直接返回0 if ( empty( $atts['category'] ) ) { return '0'; } // 按+号拆分两个分类别名 $categories = explode( '+', $atts['category'] ); // 分类数量不符合要求直接返回0 if ( count( $categories ) !== 2 ) { return '0'; } // 构建查询参数 $args = array( 'post_type' => 'post', 'post_status' => 'publish', // 仅统计已发布文章 'nopaging' => true, // 关闭分页干扰 'fields' => 'ids', // 仅查询文章ID,大幅降低查询性能消耗 'tax_query' => array( 'relation' => 'AND', // 要求文章同时归属两个分类 array( 'taxonomy' => $atts['taxonomy'], 'field' => 'slug', // 按分类别名匹配 'terms' => trim( $categories[0] ), ), array( 'taxonomy' => $atts['taxonomy'], 'field' => 'slug', 'terms' => trim( $categories[1] ), ), ), ); $query = new WP_Query( $args ); // 重置查询避免污染全局主循环 wp_reset_postdata(); // 返回符合条件的文章总数量,逻辑与$wp_query->found_posts完全一致 return (string)$query->found_posts; } add_shortcode( 'cat_count_multi', 'cat_count_multi' );
使用说明
- 统计默认文章分类交集数量,直接使用你预设的短代码格式即可:
[cat_count_multi category="jp-events+jp-1月"] - 若需统计自定义分类法(比如原代码中写的
translates_category),可直接修改代码中taxonomy对应的默认值,也可在短代码中动态传参:[cat_count_multi category="分类别名1+分类别名2" taxonomy="translates_category"] - 统计结果不受站点分页设置影响,仅计算已发布的公开文章数量。
内容的提问来源于stack exchange,提问作者Glen Charles Rowell
相关产品推荐
相关产品推荐

