¿Cómo Establecer el Título de la Página Dinámicamente?

7 nov 2011, 20:40:15
Vistas: 87.1K
Votos: 27

¿Es posible cambiar el título de la página con código?

Por ejemplo, digamos que el nombre de la página es "Reservar su Pedido", pero quiero cambiarlo a "Pedido #123".

He buscado en Google y aquí pero no he encontrado nada. ¿Alguien conoce algún plugin o truco?

wp_title devuelve el título de la página pero no permite establecer el título de la página: http://codex.wordpress.org/Function_Reference/wp_title

1
Comentarios

¿De dónde vendría el valor? ¿Qué tiene en esa página el valor de #123?

Sagive Sagive
7 nov 2011 20:51:20
Todas las respuestas a la pregunta 7
3
27

No hay documentación al respecto, pero siempre puedes aplicar un filtro a the_title de esta manera:

add_filter('the_title','some_callback');
function some_callback($data){
    global $post;
    // donde $data sería string(#) "título actual"
    // Ejemplo:
    // (deberías cambiar $post->ID por como sea que obtengas el número de pedido del libro,
    // pero puedes ver cómo funciona de esta manera con global $post;)
    return 'Pedido de Libro #' . $post->ID;
}

Consulta estos enlaces:

http://codex.wordpress.org/Function_Reference/the_title

http://codex.wordpress.org/Function_Reference/add_filter

7 nov 2011 20:55:50
Comentarios

Esto parece sobrescribir todos los títulos. ¿Cómo puedo sobrescribir solo el título actual?

Petrus Theron Petrus Theron
29 mar 2017 19:47:45

Necesitarías agregar una condición al callback, por ejemplo if ($post->ID == 45) { ... }

Nick Barrett Nick Barrett
9 jul 2018 06:55:42

El filtro the_title ya no funciona en las últimas versiones de Wordpress, usa los filtros document_title_parts o pre_get_document_title como se detalla en otras respuestas.

Brendan Nee Brendan Nee
15 nov 2018 04:48:07
2
17

A partir de WordPress 4.4, puedes usar el filtro de WordPress document_title_parts para cambiar el título.

Añade lo siguiente a functions.php:

add_filter('document_title_parts', 'my_custom_title');
function my_custom_title( $title ) {
  // $title es un array de partes del título, incluyendo una llamada `title`

  $title['title'] = 'Mi nuevo título';

  if (is_singular('post')) {
    $title['title'] = 'Publicación Reciente: ' . $title['title'];
  }

  return $title;
}
15 nov 2018 04:46:35
Comentarios

¿pero dónde pasas el parámetro a un filtro?

Tintinabulator Zea Tintinabulator Zea
22 dic 2018 07:38:33

La función anterior modifica la forma en que funcionan las funciones the_title() y get_the_title(), por lo que no es necesario pasar ningún parámetro.

Brendan Nee Brendan Nee
25 dic 2018 21:51:51
2

Para aquellos que deseen cambiar el atributo title del documento, encontré que usar el filtro wp_title ya no funciona. En su lugar, utiliza el filtro pre_get_document_title:

add_filter("pre_get_document_title", "my_callback");
function my_callback($old_title){
    return "Mi Título Modificado";
}

Fuente

12 ago 2018 22:41:37
Comentarios

gracias por regresar años después para publicar esta actualización. Había estado usando wp_title en un plugin mío durante años y no me había dado cuenta de que ya no funcionaba hasta ahora y tu respuesta me ahorró mucho esfuerzo. ¡Así que gracias!

MatthewLee MatthewLee
11 ene 2019 18:35:47

@MatthewLee Me alegra saber que te ayudó :)

Nathan Arthur Nathan Arthur
11 ene 2019 20:52:20
0

Cuando tienes Yoast habilitado, necesitas sobrescribir el título de esta forma:

add_filter('wpseo_title', 'custom_titles', 10, 1);
function custom_titles() {

  global $wp;
  $current_slug = $wp->request;

  if ($current_slug == 'foobar') {

    return 'Foobar';
  }
}
14 abr 2019 23:29:15
4

Realmente depende si estás buscando mostrar un título personalizado para la página actual (es decir, el contenido de la etiqueta <title></title> en el encabezado) o filtrar el título de las páginas en el cuerpo de la página o en listados.

En el primer caso (el título de la página actual), intenta agregar un filtro para wp_title() de esta manera: http://codex.wordpress.org/Plugin_API/Filter_Reference/wp_title

Si deseas modificar los títulos de las páginas de manera general, filtrar the_title() hará el trabajo: http://codex.wordpress.org/Plugin_API/Filter_Reference/the_title

16 dic 2013 00:32:47
Comentarios

En mi experiencia, realmente necesitas filtrar tanto wp_title como the_title para cubrir ambos casos.

Geoffrey Geoffrey
26 mar 2015 10:59:48

No estoy seguro si es por la depreciación, pero esto no funciona para mí. He probado combinaciones y filtros en línea y el nuevo apply_filters( 'pre_get_document_title', string $title )

landed landed
18 ene 2017 20:00:11

Lamentablemente, tampoco funcionó para mí.

Debbie Kurth Debbie Kurth
8 jun 2019 08:46:46

Esta respuesta tiene casi 6 años; como el autor (y alguien que ya no trabaja activamente con WP), sugeriría consultar la documentación más reciente en su lugar.

nickb nickb
9 jun 2019 22:33:46
0

Si estás utilizando All In One Seo v4+, usa este filtro:

add_filter( 'aioseo_title', 'aioseo_filter_title' );

function aioseo_filter_title( $title ) {
   if ( is_singular() ) {
      return $title . 'algún contenido adicional de título aquí';
   }
   return $title;
}
29 oct 2021 14:04:28
2
-1

Actualmente, la forma más fácil de hacer esto es utilizando una línea de JavaScript.

Coloca el siguiente código en la plantilla:

<script>document.title = "<?php echo $new_title; ?>";</script>

Este código no tiene que estar en el encabezado HTML, puede colocarse en el cuerpo del HTML.

5 sept 2020 08:14:55
Comentarios

Sin embargo, esto no será bueno para el SEO.

Alex Cook Alex Cook
21 nov 2020 02:57:00

@AlexCook Definitivamente tienes razón. Estaba trabajando en una solución rápida para algo donde el SEO no importaba. Ahora no recuerdo para qué se usó esto. jajaja.

Feng Jiang Feng Jiang
21 nov 2020 17:29:12