发布此答案是因为它是我在搜索有关定位过滤器挂钩时最终单击的搜索结果,the_title
而忽略了导航项的过滤器效果。
我正在研究一个主题中的一个部分,我想在标题一个标签内向页面标题添加按钮。
它看起来类似于:
<?php echo '<h1>' . apply_filters( 'the_title', $post->post_title ) . '</h1>'.PHP_EOL; ?>
然后我像这样“上钩”:
add_filter( 'the_title', 'my_callback_function' );
但是,上面的目标实际上是所有调用the_title
过滤器钩子的东西,这包括导航项。
我像这样更改了过滤器挂钩定义:
<?php echo '<h1>' . apply_filters( 'the_title', $post->post_title, $post->ID, true ) . '</h1>'.PHP_EOL; ?>
几乎每次对the_title
filter 的调用都将参数 1 作为 传递,将$post->post_title
参数 2 作为$post->ID
. 搜索 WordPress 核心代码apply_filters( 'the_title'*
,您将亲眼看到。
所以我决定为我想要针对调用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% 相关,但这是我在寻找解决这个问题时到达的地方。希望这对处于类似情况的人有所帮助。