WordPress文本小工具中get_post_type()短码归档页失效异常问题
问题:自定义文章类型归档页文本小工具中短码返回空值
问题现象
- 自定义短码
[pts]用于显示当前post_type别名 - 在自定义文章类型单页面的文本小工具中正常工作
- 同一侧边栏的同一小工具,在自定义文章类型归档页返回空值
- 直接在归档页模板中用
do_shortcode('[pts]')调用正常,仅文本小工具中失效
原代码
function post_type_slug() { $string = get_post_type(); return $string; } add_shortcode('pts', 'post_type_slug');
原因分析
get_post_type()默认依赖全局$post对象,但文本小工具在归档页侧边栏的加载时机,可能早于全局$post的初始化(归档页主查询是文章列表,全局$post可能指向列表中的第一篇文章,甚至在某些场景下为空),导致返回空值。而直接在模板中调用短码时,主查询已经完全初始化,get_post_type()能正确获取归档对应的post_type。
解决方案
改用get_queried_object()获取当前查询的核心对象,确保无论在单页还是归档页,都能正确拿到对应的post_type:
function post_type_slug() { // 获取当前查询的对象(单页是WP_Post,归档页是WP_Post_Type) $queried_obj = get_queried_object(); // 传入对象到get_post_type,确保返回正确的post_type别名 return get_post_type($queried_obj); } add_shortcode('pts', 'post_type_slug');
或者更简洁的写法:
function post_type_slug() { return get_post_type(get_queried_object()); } add_shortcode('pts', 'post_type_slug');
修改后,短码在文本小工具的单页、归档页场景下都能正常返回post_type别名。
内容的提问来源于stack exchange,提问作者Mohammad J
相关产品推荐
相关产品推荐

