Cambiar el título de una página dinámicamente desde un plugin
Cada página de WordPress puede describirse como teniendo dos títulos:
El título de la página/entrada, que se muestra dentro de la página/entrada a través de la llamada a la función
the_title()
La etiqueta HTML
<title></title>
que muestra el título en la parte superior del navegador
Estoy escribiendo un plugin que en cierto punto debe cambiar el título de una página dinámicamente (bueno, debería cambiar ambos títulos descritos anteriormente).
Entonces, para el paso 1 anterior, encontré múltiples soluciones en Stack Overflow (como esta o esta). Estas son excelentes solo para el paso 1 mencionado arriba.
Para el paso 2, encontré esta solución; en resumen, así es como funciona:
add_filter('wp_title', 'change_page_title');
function change_page_title ($title) {
// Hacer algo de magia, y eventualmente modificar $title y luego devolverlo
return $title;
}
Pero la solución sugerida no funciona para mí; y cuando digo que no funciona me refiero a que el filtro no está llamando a la función asociada. No estoy seguro de cuál es el problema; ¿es porque este filtro se está llamando desde dentro del plugin y no desde el tema? (Solo para información, no tengo acceso a los archivos del tema, así que tiene que hacerse desde dentro del plugin).
¿Cómo puedo lograr esto? ¿Cómo puedo cambiar el título del navegador de una página dinámicamente desde dentro de un plugin?
Gracias.

Una entrada o página tiene solo un título, la etiqueta <title>
es el título del documento.
El filtro wp_title
filtra la salida de la función wp_title()
, que se usaba anteriormente para mostrar el título del documento. En WordPress 4.1, se introdujo el soporte para title-tag
en los temas y wp_get_document_title()
se utiliza en lugar de wp_title()
. Por lo tanto, si tu tema admite title-tag
, el filtro wp_title
no tiene efecto, pero puedes usar otros filtros:
pre_get_document_title
para establecer un nuevo título
add_filter( 'pre_get_document_title', 'cyb_change_page_title' );
function cyb_change_page_title () {
return "Título personalizado";
}
document_title_separator
para filtrar el separador del título
add_filter('document_title_separator', 'cyb_change_document_title_separator');
function cyb_change_document_title_separator ( $sep ) {
return "|";
}
document_title_parts
para filtrar diferentes partes del título: título, número de página, descripción y nombre del sitio.
add_filter( 'document_title_parts', 'cyb_change_document_title_parts' );
function cyb_change_document_title_parts ( $title_parts ) {
$title_parts['title'] = 'Título personalizado';
$title_parts['page'] = 54;
$title_parts['tagline'] = "Descripción personalizada";
$title_parts['site'] = "Mi Sitio"; // Cuando no está en la página de inicio
return $title_parts;
}
PD: Puedes usar current_theme_supports( 'title-tag' )
para verificar si el tema admite title-tag
o no.

¿pero cómo pasar los metadatos únicos de una página a las funciones de filtro de manera individual por cada página?

Puedes usar funciones como is_page()
, is_single()
, is_singular()
y similares, para verificar la página o entrada actual.
