Mostrar el título SEO de Yoast WordPress en la plantilla de archivo

7 mar 2013, 12:09:36
Vistas: 45.4K
Votos: 17

El plugin WordPress SEO de Yoast permite a los usuarios agregar títulos SEO y metadescripciones a las páginas de archivo de términos de taxonomía. Estos luego se utilizan en el encabezado del documento.

Estoy tratando de mostrar el título SEO de los términos de taxonomía como un H1 en mi plantilla de archivo de taxonomía.

Hacer esto en una entrada, tipo de entrada o página es fácil:

echo get_post_meta($post->ID, '_yoast_wpseo_title', true); 

En las plantillas de archivo esto no funciona.

¿Alguien sabe cómo hacer que esto funcione?

Ejemplo de captura de pantalla

Este es el título de un término de etiqueta específico. Estoy tratando de mostrar este título - pero para un término de taxonomía personalizada - en mis plantillas de archivo.

Pantalla de edición del archivo de etiquetas

Código final

Esto es lo que terminé usando en mi plantilla archive.php. Funciona si estás usando una taxonomía personalizada. Para etiquetas o categorías, consulta la respuesta de Mike Madern más abajo.

<h1 class="archive-title">
<?php
if ( is_tax() ) :                                                                   
    $taxonomy = get_queried_object()->taxonomy;
    $term_id = get_queried_object()->term_id;
    $meta   = get_option( 'wpseo_taxonomy_meta' );
    $title  = $meta[$taxonomy][$term_id]['wpseo_title'];
    //Imprimir para depuración
    //printf( '<pre>%s</pre>', print_r( get_option( 'wpseo_taxonomy_meta' ), 1 ) );
    if ( isset($meta) && !empty($title) ) :         
        echo apply_filters( 'the_title', $title );
    else :
        single_term_title();    
    endif;
endif;                              
?>
</h1>  
0
Todas las respuestas a la pregunta 4
5
23

Obtener títulos SEO de archivos

Si definiste un título de archivo para un Custom Post Type, puedes obtenerlo con:

$titles = get_option( 'wpseo_titles' );
$title  = $titles['title-ptarchive-POST_TYPE'];

echo apply_filters( 'the_title', $title );

Recuerda reemplazar POST_TYPE por tu propio Custom Post Type.

Para mostrar todas las variables de wpseo_title, puedes usar:

printf( '<pre>%s</pre>', print_r( get_option( 'wpseo_titles' ), 1 ) );

Así podrás seleccionar fácilmente la que necesites.

Obtener títulos SEO de términos

Categorías

Con este código puedes obtener el título SEO que definiste:

$cat_id = get_query_var( 'cat' );
$meta   = get_option( 'wpseo_taxonomy_meta' );

$title  = $meta['category'][$cat_id]['wpseo_title'];

echo apply_filters( 'the_title', $title );

Etiquetas

Con este código puedes obtener el título SEO que definiste:

$tag_id = get_query_var( 'tag' );
$meta   = get_option( 'wpseo_taxonomy_meta' );

$title  = $meta['post_tag'][$tag_id]['wpseo_title'];

echo apply_filters( 'the_title', $title );

Para mostrar todas las variables de wpseo_taxonomy_meta, puedes usar:

printf( '<pre>%s</pre>', print_r( get_option( 'wpseo_taxonomy_meta' ), 1 ) );

De esta manera podrás ver la estructura y las variables disponibles.

7 mar 2013 12:39:38
Comentarios

¿Agregaste el título en SEO > títulos y metadatos > Tipos de entrada?

Mike Madern Mike Madern
7 mar 2013 13:08:23

He mejorado mi respuesta con la solución :-)

Mike Madern Mike Madern
7 mar 2013 13:51:40

Supongo que te perdiste mi última edición :-P Añadí una versión con $tag_id.

Mike Madern Mike Madern
7 mar 2013 14:11:19

Muchas gracias por el código, nunca hubiera podido resolver esto. Hice algunos cambios menores para que funcione con taxonomías personalizadas.

Mattvic Mattvic
7 mar 2013 14:45:50

Esto es genial. Tuve que usar get_queried_object()->term_id en lugar de get_query_var(), ya que el primero devuelve el ID, mientras que el segundo devuelve el slug, lo que hacía que el código mostrara avisos de "índice indefinido". También, asegúrate de verificar si hay algo configurado en $meta['post_tag|category'], ya que también obtendrás avisos de índice indefinido. (Por cierto, WP 4.2.2)

cabgfx cabgfx
20 may 2015 13:48:44
7

En la página de archivo dentro del loop de entradas, añade la siguiente línea de código para que funcione:

echo get_post_meta(get_the_ID(), '_yoast_wpseo_title', true);

Dime si te funciona o te proporcionaré otra solución.

7 mar 2013 12:17:08
Comentarios

Desafortunadamente eso no funcionó. Muestra el título SEO del primer post en el archivo. Probablemente tendré que revisar la base de datos para ver dónde se almacenan estos datos.

Mattvic Mattvic
7 mar 2013 12:22:32

¿Lo estás usando dentro del loop? ¿Podrías mostrarme el código?

Vinod Dalvi Vinod Dalvi
7 mar 2013 12:28:13

He añadido mi código. No estoy seguro si expliqué que quería mostrar el título de la página, no los títulos de cada post dentro del loop.

Mattvic Mattvic
7 mar 2013 12:45:31

Esto es exactamente lo que estaba buscando. Muestra el título SEO en el bucle. Además, reemplacé get_the_ID() con $post->ID

gerbz gerbz
8 ago 2015 05:06:53

esto me salva la vida. bien..

Mukii kumar Mukii kumar
5 ene 2018 09:52:48

Por alguna razón, esto me muestra la meta descripción como si hubiera usado _yoast_wpseo_metadesc

Versa Versa
9 ene 2018 15:11:05

@Versa Esto es porque he usado echo en el código.

Vinod Dalvi Vinod Dalvi
10 ene 2018 10:31:42
Mostrar los 2 comentarios restantes
0

Obteniendo la palabra clave principal para categorías y etiquetas

Para obtener la palabra clave principal de una Categoría o Etiqueta programáticamente, puedes usar cualquiera de estos dos métodos:

            /** Método 1. Acceder directamente a las opciones. **/
            $meta = get_option( 'wpseo_taxonomy_meta' ); // solo se necesita una vez, así que mantén esto fuera/antes de tu bucle foreach.

            $posttags = get_the_tags();
            if ($posttags) {
                foreach( $posttags as $tag ) {
                    echo $meta['post_tag'][$tag->term_id]['wpseo_focuskw'];
                }
            }

Este es básicamente el enfoque que usa Mike al final de su publicación.

o

            /** Método 2. Usar la función de Yoast. **/
            $posttags = get_the_tags();
            if ($posttags) {
                foreach( $posttags as $tag ) {
                    echo WPSEO_Taxonomy_Meta::get_term_meta( $tag->term_id, 'post_tag', 'focuskw' );
                }
            }

Tiendo a preferir el segundo enfoque porque así no tengo que obtener o preocuparme por conseguir la opción meta yo mismo.

En tu archivo functions.php, quizás quieras verificar if class_exists( 'WPSEO_Taxonomy_Meta' ) y luego quizás envolver la función de Yoast en una función propia, para estar seguro en caso de que dejes de usar Yoast SEO en el futuro.

Algo de contexto

Como se mencionó en la pregunta original, algo como get_post_meta( $tag->term_id, '_yoast_wpseo_focuskw', true); no funcionará para categorías y páginas (devolverá nada).

¿Por qué pasa eso?

Esto se debe a que, para categorías y etiquetas, la palabra clave principal se guarda en otro lugar de la base de datos. En lugar de guardarse en la tabla wp_postmeta como es habitual, está enterrada profundamente en la tabla wp_options, como un objeto JSON.

Los métodos anteriores nos permiten acceder a estos valores.


Finalmente, si eres como yo y no puedes recordar los nombres de las taxonomías (ej.: no es obvio por qué las etiquetas usan la taxonomía post_tag y no simplemente tag), solo revisa las URLs cuando editas una categoría o etiqueta: mostrará …taxonomy=category… o similar.

1 feb 2018 23:51:51
0

Respuesta Obteniendo la palabra clave principal para categorías y etiquetas

// funciona, gracias
// con la API REST

obtener /wp-json/wp/v2/categories?slug=slug_name

plugin.in usa el Método 1

cambiar la línea

$meta['post_tag'][$tag->term_id]['wpseo_focuskw'];

$meta['category'][$param_post_id]['wpseo_focuskw'];

16 jul 2018 00:54:45