2012-11-19 13 views
6

Ho creato sotto la funzione per nascondere il titolo della pagina. Ma quando lo eseguo, nasconde anche il nome del menu . Qualcuno può aiutarmi, sarà molto apprezzato.Perché il filtro the_title() viene applicato anche nel titolo del menu?

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

Perché le voci di menu hanno anche titoli e devono essere filtrati :). Se questo è il tuo tema, puoi rimuovere il filtro prima di visualizzare il menu e aggiungerlo di nuovo. In alternativa puoi fare il contrario e aggiungere il filtro solo quando ne hai bisogno. –

+2

Come farebbe qualcuno per rimuovere un filtro e aggiungerlo dopo aver visualizzato il titolo del menu? –

risposta

9

Nikola è corretto:

A causa delle voci di menu hanno anche titoli e hanno bisogno di essere filtrati :).

Per effettuare questa operazione solo chiamate nel messaggio, e non nel menu, è possibile aggiungere un assegno per in_the_loop() - se è vero, sei in un post.

Quindi cambiare la prima linea nella funzione di:

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

e tutti dovrebbero essere bene.

+0

grazie mille – softsdev

+0

@Paul Questo non funziona per il widget che contiene il menu personalizzato. –

3

Si può fare qualcosa di simile:

Nel vostro function.php:

add_filter('the_title', 'ze_title'); 
function ze_title($a) { 
    global $dontTouch; 
    if(!$dontTouch && !is_admin()) 
     $a = someChange($a); 
    return $a; 
} 

Nel modello:

$dontTouch = 1; 
wp_nav_menu(array('menu' => 'MyMenu')); 
$dontTouch = 0; 
+2

Non pulito, ma semplice e funziona. – sglessard

3

E 'un po' di hack, ma si riesce a risolvere questo con l'aggiunta la tua azione su 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'); 

Incorporando the_title filtro all'interno di un'azione loop_start, abbiamo evitare di sovrascrivere attribuisce il titolo del menu.

0

Inserendo questa risposta perché era il risultato della ricerca, ho finito per fare clic su durante la ricerca di targeting del filtro hook the_title ignorando l'effetto del filtro per gli elementi di navigazione.

Stavo lavorando su una sezione di un tema che volevo aggiungere pulsanti al titolo della pagina all'interno del tag dell'intestazione uno.

sembrava simile a questo:

<?php echo '<h1>' . apply_filters('the_title', $post->post_title) . '</h1>'.PHP_EOL; ?> 

ero poi "aggancio in" come questo:

add_filter('the_title', 'my_callback_function'); 

Tuttavia, gli obiettivi summenzionati letteralmente tutto che chiama gancio the_title filtro e questo include elementi di navigazione.

ho cambiato la definizione gancio filtro simili:

<?php echo '<h1>' . apply_filters('the_title', $post->post_title, $post->ID, true) . '</h1>'.PHP_EOL; ?> 

Praticamente ogni chiamata the_title filtro passa parametro 1 come $post->post_title e 2 come parametro $post->ID. Cerca il codice principale di WordPress per apply_filters('the_title'* e vedrai tu stesso.

Quindi ho deciso di aggiungere un terzo parametro per le situazioni in cui desidero indirizzare elementi specifici che chiamano il filtro the_title. In questo modo, posso ancora ricevere il beneficio di tutte le richiamate che si applicano al hook del filtro the_title per impostazione predefinita, pur avendo la possibilità di indirizzare semi-univocamente gli elementi che utilizzano il filtro con il parametro the_title con il terzo parametro.

Si tratta di un semplice parametro di 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); 

Etichetta le variabili nel modo desiderato. Questo è ciò che ha funzionato per me, e fa esattamente quello che mi serve. Questa risposta potrebbe non essere al 100% rilevante per la domanda posta, ma è qui che sono arrivato mentre cercavo di risolvere questo problema. Spero che questo aiuti qualcuno in una situazione simile.