Wordpress version 4.5.1
Estoy tratando de actualizar dinámicamente los títulos de página en una plantilla en particular. Después de mucho excavar y aprender sobre los wp_title()
cambios, estoy tratando de usar document_title_parts
. Sin embargo, no puedo hacer que el filtro se ejecute en absoluto.
Estoy en un tema infantil functions.php
:
add_theme_support( 'title-tag' );
//add_filter("after_setup_theme", function(){ add_theme_support("title-tag"); });
add_filter( 'document_title_parts', function( $title )
{
error_log('here');
return $title;
}, 10, 1 );
He intentado ambas variaciones de agregar compatibilidad con temas como se muestra arriba, pero viendo mi registro, no aparece nada en la recarga de la página. Eso error_log
funcionaba con otras funciones (como wp_title
), por lo que el registro de errores funciona.
También lo intenté pre_get_document_title
, lo que se dispara al cargar la página, aunque no puedo hacer que cambie realmente el título.
¡Entonces! Estoy usando el filtro incorrectamente, no configuré mi tema correctamente o algo más de lo que no estoy al tanto. Cualquier ayuda sería muy apreciada!
editar para agregar más detalles
Intentando una función init, pero eso tampoco funciona: https://gist.github.com/anonymous/6db5af892a4cf4fb029655167d7002a4
Además, aunque eliminé cualquier referencia <title>
de header.php
, el título real del sitio todavía aparece en la fuente.
//add_filter("after_setup_theme", function(){ add_theme_support("title-tag"); });
? Es el uso correcto de agregar soporte de temas.add_theme_support()
función en un gancho de inicio . Otra cosa es asegurarse de sobrescribir suheader.php
archivo para que no tenga una<title>
etiqueta html .<title>
etiquetas en tuheader.php
? Tal vez intente reemplazar10
conPHP_MAX_INT
. Además, el parámetro pasado es una matriz en lugar de un valor de cadena.Respuestas:
Ejecuté su filtro en mi área de desarrollo. No funcionó. Luego apagué el plugin Yoast SEO, que sabía que también estaba jugando con el título de la página. Entonces funcionó. Por lo tanto, mi sugerencia sería que otro plugin está jugando con él.
En el caso de Yoast, fue una llamada de filtro para
pre_get_document_title
devolver no vacío. En ese caso,wp_get_document_title
se cortocircuita y el resto de la función, incluido eldocuments_title_parts
filtro, no se evalúa, como puede ver en las primeras líneas de código:Entonces, tomé tu filtro y cambié el gancho a
pre_get_document_title
. No funcionó. Luego cambié la prioridad a un nivel más alto que el mismo filtro en Yoast. Entonces funcionó. Por lo tanto, no sé acerca de su configuración, pero le sugiero que pruebe esto:fuente
pre_get_document_title
prioridad 15 es suficiente.Después de experimentar un poco, llegué a la siguiente sugerencia: ¿podría ser que la
<title>
etiqueta está "codificada" dentro del tema principalheader.php
? Si ese es el caso, puede intentar eliminar la<title>
etiqueta del tema de su hijoheader.php
(copie el de sus padresheader.php
en la carpeta del tema de su hijo) y luego agregar el soporte del tema nuevamente a través defunctions.php
:Trataré de explicar lo que me llevó a esta sugerencia: intenté como usted y otros sugirieron, pero resultó que encontré dos
<title>
etiquetas en el código fuente. El primero tenía el título estándar , el segundo el título modificado . Pero (por supuesto) en la barra de título del navegador solo pude ver el título predeterminado.Luego verifiqué el
header.php
tema principal que usé (veinticuatro) y la<title>
etiqueta estaba codificada dentro de esa plantilla así:Después de eliminarlo, agregué el siguiente código al tema secundario
functions.php
y funcionó:Básicamente, también funcionó antes de eliminar la
<title>
etiqueta de la plantilla, solo que había dos<title>
etiquetas de las cuales la última se ignoró. ¿Podría ser este el mismo problema con tu tema?Desde wp 4.4.0, sin embargo, la
<title>
etiqueta se crea dinámicamente por la función_wp_render_title_tag()
que básicamente llama a otra funciónwp_get_document_title()
y envuelve las etiquetas html alrededor del resultado. Larga historia corta: si a su temaheader.php
le falta la<title>
etiqueta, es probable que pueda anular el título directamentepre_get_document_title
odocument_title_parts
como se describe aquí :1) cambiar el título directamente:
2) filtrar las partes del título:
fuente
Después de leer su publicación de arriba a abajo y de abajo hacia arriba, es probable que tenga un filtro que está pasando un título a través del
pre_get_document_title
filtro. La pista aquí la siguiente declaración:Mirando el código soure para
wp_get_document_title()
, vemos el siguiente código:Lo que esto significa es que, cuando un valor no vacío pasa a través del
pre_get_document_title
filtro, lawp_get_document_title()
función devolverá cualquier valor que se haya pasado a través delpre_get_document_title
filtro. En este caso, eldocument_title_separator
filtro y eldocument_title_parts
filtro nunca se ejecutarán, ya que estos solo se ejecutan después delpre_get_document_title
filtro.Mirando lo que dijiste un poco más adelante:
definitivamente tiene un
pre_get_document_title
filtro con autoridad que anula su instancia del mismo filtro y, debido a este filtro, la función devuelve lo que se le pasa, lo que hace que sudocument_title_parts
filtro no se ejecute.Lo que deberá hacer es utilizar uno
grep
o un buen editor y buscarwp-content
esepre_get_document_title
filtro en toda su carpeta . Una vez que haya localizado ese filtro, puede sacarlo de allí para quitarlo y reemplazarlo con el suyo.fuente
document_title_parts
opre_get_document_title
devuelve 0 resultados. Estoy usando SublimeText 2 para buscar todo el contenido de wp ...pre_get_document_title
, lo que habría explicado totalmente por qué el segundo filtro no se dispararía. Esto deja elpre_get_document_title
filtro vacío, lo que significa que los otros dos filtros en la función deben activarse, pero no lo hacen. Me deja concluir un núcleo corrupto de Wordpress.Si el tema principal no declara soporte para
title-tag
usted, puede hacerlo así en el tema secundarioFiltre la
document_title_parts
matriz de tipo de retorno esperado, de esta manera, asegúrese de cambiar la condición if según sus requisitos, o elimínela por completo para cambiar el título en todo el sitio solo para probar si funciona.¿Puedes probar estas dos funciones?
fuente
add_theme_support_child
se registra.