2012-11-19 24 views
6

我在下面創建了隱藏頁面標題的功能。但是,當我執行它也隱藏 菜單名稱。任何人都可以幫助,這將是高度讚賞。爲什麼the_title()過濾器也應用於菜單標題中?

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')); 
+6

因爲菜單項也有標題,所以需要過濾:)。如果這是您的主題,則可以在顯示菜單之前刪除過濾器,然後再次添加。或者,您可以做相反的事情,只在需要時才添加過濾器。 –

+2

某人在顯示菜單標題後如何去除過濾器並將其添加回去? –

回答

9

尼古拉是正確的:

由於菜單項也有冠軍,他們需要過濾:)。

爲了使這個只有通話的崗位,而不是在菜單中,您可以添加一張支票in_the_loop() - 如果這是真的,你在後。

所以在功能改變的第一行:

if(is_admin() || !in_the_loop())

,所有應該很好。

+0

非常感謝你 – softsdev

+0

@Paul這不適用於包含自定義菜單的小部件。 –

3

你可以做這樣的事情:

在你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

不乾淨,但簡單,工作。 – sglessard

3

這是一個黑客位,但你可以通過添加解決這個你的動作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過濾器,我們避免覆蓋菜單標題屬性。

0

發佈此答案,因爲它是搜索結果我最終在搜索有關定位過濾器鉤子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%相關的問題,但這是我在尋找解決這個問題時到達的地方。希望這可以幫助處於類似情況的人。

相關問題