Cambiar el título de una página dinámicamente desde un plugin

24 dic 2016, 07:35:30
Vistas: 20.5K
Votos: 6

Cada página de WordPress puede describirse como teniendo dos títulos:

  1. 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()

  2. 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.

0
Todas las respuestas a la pregunta 2
2

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.

24 dic 2016 09:08:30
Comentarios

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

Tintinabulator Zea Tintinabulator Zea
22 dic 2018 22:40:33

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

cybmeta cybmeta
24 dic 2018 10:29:14
2

Usando este código en tu page.php o en la página que quieras modificar <pre> <title><?php wp_title(); ?> | <?php bloginfo(‘name’); ?></title> </pre>

24 dic 2016 08:17:30
Comentarios

¿Te refieres al tema? No tengo acceso a los archivos del tema.

Greeso Greeso
24 dic 2016 08:24:55

Funcionó. Muchas gracias

Faisal Ramzan Faisal Ramzan
11 ene 2020 02:00:26