不带筛选器的GET_TITLE(_TITLE)

时间:2017-02-22 作者:Kevin Nugent

我正在使用一个函数过滤\\u标题,在结尾添加一个字符串,但也希望返回原始标题,未在同一页上过滤。有没有办法不经过过滤就获得标题?

2 个回复
最合适的回答,由SO网友:engelen 整理而成

有几种方法可以做到这一点,但我认为,一般来说,首选的方法是获取post_title 属性。这并不取决于删除某个函数的所有过滤器,然后再将其添加回来,后者要求您直接访问全局$wp_filter.

get_post 检索post ID的post对象,post对象在构造时使用数据库中的字段填充所有post字段,而不应用任何筛选。

因此,您的代码只需

$title = get_post( $post_id )->post_title;
如果ID为的帖子$post_id 不保证存在,请确保检查get_post 是post对象。

注意:另一种方法是使用get_post_field( \'post_title\', $post_id ), 默认情况下只有过滤器\'post_title\' 应用于它(而不是the_title 过滤器)。然而,正如@PatJ善意地指出的,使用可选的$context 参数,可以使用上下文获取原始值"raw":

get_post_field( \'post_title\', $post_id, \'raw\' );

SO网友:David Lee

您可以创建自己的函数functions.php:

function get_title_no_filters($post = 0){

    $post = get_post( $post );

    echo isset( $post->post_title ) ? $post->post_title : \'\';
}
像这样使用,就像get_the_title WordPress提供:

get_title_no_filters();//inside a loop no need to send ID or post object
如果没有在循环中使用它,则可以发送ID或Post对象。这是raw 标题无筛选器。