¿Cómo personalizar el título de la página de resultados de búsqueda?

5 may 2016, 13:21:56
Vistas: 27.5K
Votos: 3

Me gustaría personalizar el título de la página de resultados de búsqueda:

de:

<title>Resultados de búsqueda para "texto buscado" – Página 2 – Nombre del sitio</title>

a:

<title>"texto buscado" página de resultados – Página 2 – Nombre del sitio</title>

En mi plantilla search.php, get_header() es probablemente el que está siendo llamado para generar la etiqueta <title>.

¿Hay algún filtro que pueda aplicar para hacer esta personalización?

0
Todas las respuestas a la pregunta 1
4

Dentro de la función wp_get_document_title() tenemos:

// Si es una búsqueda, usa un título dinámico para los resultados.
} elseif ( is_search() ) {
        /* translators: %s: término de búsqueda */
        $title['title'] = sprintf( 
            __( 'Resultados de búsqueda para &#8220;%s&#8221;' ), 
            get_search_query() 
        );

así que podrías engancharte al filtro document_title_parts para ajustarlo a tus necesidades.

Ejemplo:

/**
 * Modifica el título del documento para la página de búsqueda
 */
add_filter( 'document_title_parts', function( $title )
{
    if ( is_search() ) 
        $title['title'] = sprintf( 
            esc_html__( 'Página de resultados para &#8220;%s&#8221;', 'my-theme-domain' ), 
            get_search_query() 
        );

    return $title;
} );

Nota: Esto asume que tu tema soporta title-tag.

Actualización:

¿Puedo también personalizar la parte de Página 2 del título en el mismo filtro?

Respecto a la parte de página, puedes ajustarla de manera similar con:

/**
 * Modifica la parte de página del título del documento para la página de búsqueda
 */
add_filter( 'document_title_parts', function( $title ) use( &$page, &$paged )
{
    if ( is_search() && ( $paged >= 2 || $page >= 2 ) && ! is_404() ) 
        $title['page'] = sprintf( 
            esc_html__( 'Esta es la página %s', 'my-theme-domain' ), 
            max( $paged, $page ) 
        );

    return $title;
} );
5 may 2016 14:05:50
Comentarios

Funciona perfectamente. Una pregunta, intenté cambiar el parámetro domain a mi 'slug del tema hijo', 'slug del tema padre', e incluso eliminar el parámetro, todos funcionan. ¿Cuál sería un ejemplo de uso práctico para el parámetro domain? Gracias.

KDX KDX
5 may 2016 15:51:24

Una pregunta adicional sobre esto, en lugar de hacer otra pregunta. ¿Puedo también personalizar la parte Page 2 del título en el mismo filtro? Haciéndolo This is 2 page, lo cual puede no tener sentido en inglés simple, pero lo estoy adaptando a una gramática no inglesa.

KDX KDX
5 may 2016 15:56:13

Respondiendo mi propia pregunta adicional en el comentario. Modificar la declaración return de la siguiente manera hará el truco: return preg_replace('/Page (\d+)/', 'This is $1 page', $title);

KDX KDX
5 may 2016 16:21:26

Agregué un ejemplo para la parte de página. Incluí el dominio, ya que es muy probable que las cadenas no estén disponibles en la traducción central, así que depende de ti traducirlas. @KDX

birgire birgire
6 may 2016 00:22:29