在_title()中获取帖子ID的安全方法

时间:2015-02-12 作者:Jay

有没有安全的方法把帖子ID放进去the_title()?

add_filter(\'the_title\', "change_post_title");

function change_post_title($title){

}
我试过使用global $postget_the_ID(), 但这在某些情况下不起作用(例如,在单个页面上the_title() 正在导航中调用以链接到下一篇文章。global $postget_the_ID() 将引用单个帖子,而不是链接到的帖子。)

具有get_page_by_title() 我必须生成多个查询来覆盖所有帖子类型。

我必须退回到自定义查询吗?

1 个回复
SO网友:Pieter Goosen

Wordpress中的一些过滤器对用户并不友好,并且并不总是能够满足用户的需要。

the_title 筛选器将对的所有实例应用更改get_the_title() (用于the_title()). 因此,小部件标题、相关帖子标题和帖子链接标题都发生了更改,例如,当您只需要在单个页面上定位主帖子时,这是一个问题

我最近碰到this post 乔希·莱文森在他的博客上发表了同样的观点。他建议利用loop_start 操作,检查是否在主查询中,如果在主查询中,请应用the_title 滤器如果查询不是主查询,只需删除筛选器

我对原始代码做了一些更改。请注意,您需要php 5.3+,因为闭包只在php 5.3中引入

add_action(\'loop_start\', function ($q)
{
    if($q->is_main_query()){
        add_filter( \'the_title\', \'modified_post_title\', 10, 2);
    }else{
        remove_filter(\'the_title\',\'modified_post_title\', 10, 2);
    }
});
function modified_post_title($title)
{
    global $post;
    ?><pre><?php var_dump($post->ID); ?></pre><?php 
}

结束

相关推荐