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

14

El complemento SEO de WordPress de Yoast permite a los usuarios agregar títulos SEO y meta descripciones a las páginas de archivo de términos de taxonomía. Estos 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 publicación, tipo de publicación 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 personalizado, en mis plantillas de archivo.

La pantalla de edición del archivo de etiquetas

Código final

Esto es lo que terminé usando en mi archive.phpplantilla. Funciona si está utilizando una taxonomía personalizada. Para ver etiquetas o categorías, eche un vistazo a la respuesta de Mike Madern a continuación.

<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'];
    //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>  
Mattvic
fuente

Respuestas:

19

Obtenga títulos de SEO de archivo

Si definió un título de archivo de Tipo de publicación personalizado, puede obtenerlo:

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

echo apply_filters( 'the_title', $title );

Recuerde reemplazar POST_TYPEpor su propio tipo de mensaje personalizado.

Para mostrar todas las wpseo_titlevariables, puede usar:

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

Para que pueda elegir fácilmente el que necesita.

Obtener títulos de SEO a plazo

Categorias

Al usar este código, puede obtener el título de SEO que definió:

$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

Al usar este código, puede obtener el título de SEO que definió:

$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 wpseo_taxonomy_metavariables, puede usar:

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

De esta manera puede ver la estructura y las variables disponibles.

Mike Madern
fuente
Agregaste el título en SEO > títulos y metas > ¿ Tipos de publicaciones ?
Mike Madern
Mejoré mi respuesta con la solución :-)
Mike Madern
Supongo que te perdiste la última edición de mi publicación: -PI agregó una versión con $tag_id.
Mike Madern
1
Muchas gracias por el código, nunca podría resolver esto. Hice algunos cambios menores para que funcione con taxonomías personalizadas.
Mattvic
Esto es genial. Tuve que usar get_queried_object()->term_id, en lugar de eso get_query_var(), ya que el primero devuelve la identificación, el segundo devuelve la babosa, haciendo que el código arroje avisos de "índice indefinido". Además, tenga cuidado para comprobar si hay es conjunto nada $meta['post_tag|category'], como te Avisos Índice indefinidos también. (WP 4.2.2, por cierto)
cabgfx
5

En la página de archivo en el bucle posterior, agregue la siguiente línea de código para que funcione

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

Dígame si está funcionando para usted o le proporcionaré otra solución.

Vinod Dalvi
fuente
Eso no funcionó desafortunadamente. Muestra el título de SEO de la primera publicación en el archivo. Probablemente tendré que sumergirme en la base de datos para ver dónde se almacenan estos datos.
Mattvic
¿Lo estás usando en bucle? ¿Me puede mostrar el código?
Vinod Dalvi
He agregado mi código. No estoy seguro si le expliqué que quería generar el título de la página, no los títulos de cada publicación en el bucle.
Mattvic
Esto es exactamente lo que estaba buscando. Emite el título de SEO en el bucle. Además, reemplacé get_the_ID () con $ post-> ID
gerbz
Esto me salva la vida. bueno ..
Mukii kumar
0

Obtener la palabra clave de enfoque para categorías y etiquetas

Para obtener la palabra clave de enfoque de una Categoría o Etiqueta mediante programación, puede usar cualquiera de estos dos métodos:

            /** Method 1. Tap into the options directly. **/
            $meta = get_option( 'wpseo_taxonomy_meta' ); // needed only once, so keep this outside/before your foreach loop.

            $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 utilizado por Mike al final de su publicación.

o

            /** Method 2. Use Yoast's function. **/
            $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 de esta manera no tengo que buscar ni preocuparme por obtener la meta opción yo mismo.

En su functions.php, es posible que desee probar if class_exists( 'WPSEO_Taxonomy_Meta' )y luego envolver la función Yoast en una función propia, para estar seguro en caso de que alguna vez deje de usar Yoast SEO en el futuro.

Algunos antecedentes

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

Entonces, ¿por qué es eso?

Esto se debe a que, para categorías y etiquetas, la palabra clave de enfoque se guarda en otra parte de la base de datos. En lugar de guardarse dentro de la wp_postmetatabla como de costumbre, está enterrado en el fondo de la wp_optionstabla, como un objeto JSON.

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


Finalmente, si eres como yo y no puedes recordar el nombre de las taxonomías (por ejemplo: no es obvio por qué las etiquetas usan taxonomía post_tagy no solo tag, solo revisa las URL cuando editas una categoría o una etiqueta: se mostrará …taxonomy=category…o similares.

Fabien Snauwaert
fuente
0

Responder Obtener la palabra clave de enfoque para categorías y etiquetas

// funciona gracias
// con la API de descanso

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

plugin.in usa el Método 1

cambio de linea

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

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

Chaiiz Rataphan
fuente