2015-12-14 7 views
8

Ho appena aggiungere il seguente filtro` nel mio tema functions.php di file:Wordpress 4.4+: filtro wp_title ha alcun effetto sul <title> `tag

function change_the_title() { 
    return 'My modified title'; 
} 
add_filter('wp_title', 'change_the_title'); 

E nella mia header.php:

<!DOCTYPE html> 
<html <?php language_attributes(); ?>> 
<head> 
    <meta charset="<?php bloginfo('charset'); ?>"> 
    <meta id="viewport" name="viewport" content="width=device-width"> 
    <link rel="profile" href="http://gmpg.org/xfn/11"> 
    <link rel="pingback" href="<?php bloginfo('pingback_url'); ?>"> 
    <?php wp_head(); ?> 
</head> 
<body <?php body_class();?>> 

Poi , Ho trovato il titolo della mia pagina ha fatto non cambiato! E il tag title è stato iniettato nella funzione wp_head.

Inoltre, se si chiama manualmente la funzione wp_title nell'intestazione, viene restituito il valore previsto.

Qual è il problema? Come posso aggirarlo?


Aggiunta: La mia versione di WordPress è 4.4.

risposta

26

Ho finalmente scoperto che il codice core wordpress è stato modificato, vedere la parte di codice sottostante.

/** 
* Displays title tag with content. 
* 
* @ignore 
* @since 4.1.0 
* @since 4.4.0 Improved title output replaced `wp_title()`. 
* @access private 
*/ 
function _wp_render_title_tag() { 
    if (! current_theme_supports('title-tag')) { 
     return; 
    } 

    echo '<title>' . wp_get_document_title() . '</title>' . "\n"; 
} 

Così, dopo 4.4, il nucleo non iniettare il risultato wp_title nel tag di intestazione <title>, ma fanno la stessa cosa con una nuova funzione wp_get_document_title.

Così, invece, siamo in grado di fare la stessa cosa per:

1. Modificare il titolo direttamente:

add_filter('pre_get_document_title', 'change_the_title'); 
function change_the_title() { 
    return 'The expected title'; 
} 

2. filtrando le parti titolo:

add_filter('document_title_parts', 'filter_title_part'); 
function filter_title_part($title) { 
    return array('a', 'b', 'c'); 
} 

Per ulteriori informazioni, vedere i dettagli qui: https://developer.wordpress.org/reference/functions/wp_get_document_title/

PS: Guardare alla fonte della funzione wp_get_document_title è una buona idea, i ganci all'interno dei quali dice molto.

+2

Grazie @fish_ball la risposta perfetta. – wesamly

+2

FINALMENTE! Ogni altro post su questo argomento è sbagliato - inchiodato! Grazie! –

+0

Man ... A volte odio WordPress. Perché è stato così difficile da trovare? –

-2

non trovi il title nel tag head, aggiungere tag <head>

<title><?php wp_title('|', true, 'left'); ?></title> tua wp_filter funzionerà normalmente.

+0

Grazie, ma alla fine ho trovato la soluzione da solo. –

+1

Non abbiamo bisogno di farlo, perché la funzione di base 'wp_head()' farà l'iniezione. –

0

Non so se è necessario iniettare la variabile, ma provare questo.

function change_the_title($title) { 
    return 'My modified title'; 
} 
add_filter('wp_title', 'change_the_title'); 
+0

Grazie, ma alla fine ho trovato la soluzione da solo. –

+0

Fantastico, non lo sapevo :) –