发布这个答案,因为这是搜索结果,我最终点击时搜索有关过滤器钩子the_title的目标,同时忽略导航项目的过滤效果。
我正在处理主题中的一个部分,我想在标题一个标记内向页面标题添加按钮。
它看起来像这样:
<?php echo '
' . apply_filters( 'the_title', $post->post_title ) . ''.PHP_EOL; ?>
然后我像这样“挂钩”:
add_filter( 'the_title', 'my_callback_function' );
但是,上面的目标实际上是调用the_title过滤器钩子的所有东西,这包括导航项目。
我改变了过滤钩定义,如下所示:
<?php echo '
' . apply_filters( 'the_title', $post->post_title, $post->ID, true ) . ''.PHP_EOL; ?>
几乎每次调用the_title过滤器都将参数1作为$post->post_title,将参数2作为$post->ID。搜索apply_filters( 'the_title'*的WordPress核心代码,你会亲眼看到。
所以我决定在我想要定位调用the_title过滤器的特定项目的情况下添加第三个参数。这样,我仍然可以获得默认情况下应用于the_title过滤器挂钩的所有回调的好处,同时还能够使用the_title过滤器挂钩和第三个参数半独特地定位项目。
这是一个简单的boolean参数:
/**
* @param String $title
* @param Int $object_id
* @param bool $theme
*
* @return mixed
*/
function filter_the_title( String $title = null, Int $object_id = null, Bool $theme = false ) {
if( ! $object_id ){
return $title;
}
if( ! $theme ){
return $title;
}
// your code here...
return $title;
}
add_filter( 'the_title', 'filter_the_title', 10, 3 );
根据需要标记变量。这对我有用,它完全符合我的需要。这个答案可能与提出的问题没有100%的相关性,但这是我在寻找解决这个问题时到达的地方。希望这可以帮助处于类似情况的人。