你如何add_filter只有一个the_title()的实例

时间:2013-12-19 20:21:17

标签: wordpress add-filter

我创建了一个修改帖子的_title()的过滤器,但我遇到的问题是它正在修改the_title()的每个实例。我使用in_the_loop()函数解决了大部分问题,但是在循环中具有“next post”“previous post”导航链接的任何主题仍然应用了过滤器(可以理解)。如何将过滤器仅应用于当前帖子的the_title()?

function xyz_the_title( $the_title ) {

    if( !in_the_loop() )
        return $the_title;

    $location = get_post_meta( get_the_ID(), 'location', true );

    $the_title .= ' - ' . $location;

    return $the_title;  

}

add_filter( 'the_title', 'xyz_the_title' );

4 个答案:

答案 0 :(得分:1)

啊,不知道是插件。在这种情况下,我认为您应该可以使用if_filter。这将检查过滤器是否已在相关页面上运行x次。因此,我们检查它是否在页面上运行过一次,如果是,则不再运行。另外,我假设你只希望在单个帖子页面上运行它。这是未经测试的。

function xyz_the_title( $the_title ) {

    if( is_single() AND did_filter('the_title') === 1 ) {

        if( !in_the_loop() )
            return $the_title;

        $location = get_post_meta( get_the_ID(), 'location', true );
        $the_title .= ' - ' . $location;
        return $the_title;  
    }
}
add_filter( 'the_title', 'xyz_the_title' );

答案 1 :(得分:0)

使用jQuery

这样的事情可以解决问题:

$(document).ready(function() {
    $('#entry-header').text(function(i, oldText) {
        return oldText === 'Popular Science' ? 'New word' : oldText;
    });
});

这只是在热门科学时取代内容。请参阅jQuery API中的文本。

答案 2 :(得分:0)

您可以编辑模板文件,而不是过滤the_title,然后将该位置附加到您返回的the_title()。

            echo "<h1>" . get_the_title() . " - " . $location . "</h1>";

答案 3 :(得分:0)

进入类似的情况,并希望这个线程可以救我......

无论如何,这是我到目前为止设法做的事情

add_filter( 'the_title', function( $title, $id ){
    /**
     * don't run in the backend
     */
    if( is_admin() ) {
        return $title;
    }


    /**
     * invalid values received
     */
    if( empty( $title ) || $id < 1 ){
        return $title;
    }


    global $post;
    if ( ! $post instanceof WP_Post ){
        return $title;
    }


    /**
     * PREVENTATIVE MEASURE...
     * only apply the filter to the current page's title,
     * and not to the other title's on the current page
     */
    global $wp_query;
    if( $id !==  $wp_query->queried_object_id ){
        return $title;
    }

    /**
     * Don't run this filter if wp_head calls it
     */
    if( doing_action( 'wp_head' ) ){
        return $title;
    }

    return 'MODIFIED - '.$title;
});

以下是不足之处:

  1. 如果您在当前页面上显示相同的帖子,在其他地方,它也会修改帖子标题
  2. 目前正在考虑查看调用堆栈以检测调用是否来自主题......

    但我建议你找到另一个解决方案......