我创建了一个修改帖子的_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' );
答案 0 :(得分:1)
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;
});
目前正在考虑查看调用堆栈以检测调用是否来自主题......
但我建议你找到另一个解决方案......