我创建了以下功能来隐藏页面标题。但是当我执行它时,它也会隐藏菜单名称。
function wsits_post_page_title( $title ) {
if( is_admin())
return $title;
$selected_type = get_option('wsits_page_show_hide');
if(!is_array($selected_type)) return $title;
if ( ( in_array(get_post_type(), $selected_type ) ) && get_option('wsits_page_show_hide') )
{
$title = '';
}
return $title;
}
add_filter( 'the_title', array($this, 'wsits_post_page_title') );
答案 0 :(得分:14)
尼古拉是对的:
因为菜单项也有标题,需要进行过滤:)。
要仅在帖子中进行此调用,而不是在菜单中,您可以添加in_the_loop()
的检查 - 如果确实如此,则您在帖子中。
因此,将函数中的第一行更改为:
if( is_admin() || !in_the_loop() )
一切都应该好。
答案 1 :(得分:4)
你可以这样做:
在function.php
:
add_filter( 'the_title', 'ze_title');
function ze_title($a) {
global $dontTouch;
if(!$dontTouch && !is_admin())
$a = someChange($a);
return $a;
}
在你的模板中:
$dontTouch = 1;
wp_nav_menu( array('menu' => 'MyMenu') );
$dontTouch = 0;
答案 2 :(得分:4)
这有点像黑客,但你可以通过将你的行动添加到loop_start来解决这个问题。
function make_custom_title( $title, $id ) {
// Your Code Here
}
function set_custom_title() {
add_filter( 'the_title', 'make_custom_title', 10, 2 );
}
add_action( 'loop_start', 'set_custom_title' );
通过在loop_start动作中嵌入the_title过滤器,我们可以避免覆盖菜单标题属性。
答案 3 :(得分:1)
发布此答案,因为这是搜索结果时我最终点击了搜索过滤器挂钩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
过滤器都会将参数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%的相关性,但这是我在寻找解决这个问题时到达的地方。希望这可以帮助处于类似情况的人。
答案 4 :(得分:0)
全局$ dontTouch; 解决方案由于某种原因对我不起作用。因此,我只是在 header.php 中删除了菜单周围的过滤器:
var data2Array = fullDataArray(csvData2);
console.log("data2 clean: " + data2Array);
// request line graph - data2
var data2Table = new google.visualization.DataTable(data2Array);
data2Table.addColumn('number', 'colIndex');
data2Table.addColumn('string', 'colLabel1');
data2Table.addColumn('string', 'colLabel2');
data2Table.addColumn('string', 'colLabel3');
data2Table.addColumn('string', 'colLabel4');
var testArr = [0, data2Array[0][0],data2Array[0][4], data2Array[0][5], data2Array[0][7]];
console.log('test: ' + testArr);
data2Table.addRow([0, data2Array[0][0],data2Array[0][4], data2Array[0][5], data2Array[0][7]]);
一切都很好。
答案 5 :(得分:0)
我认为您正在寻找这个:
function change_title($title) {
if( in_the_loop() && !is_archive() ) { // This will skip the menu items and the archive titles
return $new_title;
}
return $title;
}
add_filter('the_title', array($this, 'change_title'), 10, 2);