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
相关产品推荐
相关产品推荐

