You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 06:13:31