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

WordPress动作钩子函数中如何获取自定义文章类型的文章日期及详情?

解决WordPress自定义文章类型中获取当前文章详情的问题

嘿,我看到你作为WordPress新手遇到的问题了——在init钩子里调用get_the_date()拿不到数据,这其实是钩子时机的问题,咱们一步步来解决:

为什么你的现有代码无效?

init钩子是WordPress初始化阶段触发的,这时候系统还没解析当前请求的内容,不知道你访问的是哪篇文章,全局的$post对象还没被初始化,所以get_the_date()(默认依赖全局$post)根本找不到对应的文章数据。而且init本来是用来注册自定义文章类型、分类法这类初始化操作的地方,不适合用来获取单篇文章的详情。

正确的做法:选对钩子+获取文章对象

要获取当前自定义文章类型的详情,你需要在WordPress已经确定当前文章之后的钩子上操作,比如template_redirect(模板加载前),或者针对自定义文章类型的特定钩子。下面是具体示例:

假设你的自定义文章类型slug是lyric,我们可以这样写:

// 替换成合适的钩子,这里用template_redirect确保已加载当前文章
add_action('template_redirect', 'Theme2035_get_lyric_details');
function Theme2035_get_lyric_details() {
    // 先判断当前页面是不是你的自定义文章类型的单页
    if (is_singular('lyric')) {
        // 获取当前文章的完整对象
        $current_post = get_post();
        
        // 获取文章日期的几种方式:
        // 1. 使用get_the_date(),此时全局$post已存在,可直接调用,还能自定义格式
        $formatted_date = get_the_date('Y年m月d日 H:i');
        
        // 2. 直接从文章对象中取原始数据库格式的日期
        $raw_date = $current_post->post_date;
        $modified_date = $current_post->post_modified; // 获取修改日期
        
        // 其他文章详情都可以从$current_post对象中获取:
        $post_title = $current_post->post_title;
        $post_content = $current_post->post_content;
        $post_author_id = $current_post->post_author;
        
        // 这里可以添加你需要的业务逻辑,比如输出日期或处理数据
        echo "当前歌词文章发布日期:{$formatted_date}";
    }
}

额外提示:如果在模板文件中操作

如果你是想在自定义文章类型的模板(比如single-lyric.php)里获取详情,那更简单——直接在模板里调用get_the_date(),或者直接使用全局$post对象即可,不需要额外的钩子:

// 在single-lyric.php模板中
echo get_the_date('Y-m-d');
// 或者直接取全局对象
global $post;
echo $post->post_date;

这样就能轻松拿到你需要的文章日期和其他详情啦!

内容的提问来源于stack exchange,提问作者La Reyna

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 07:54:56