Exibir o título do SEO Yoast WordPress no modelo de arquivo

13

O plugin SEO SEO do Yoast permite que os usuários adicionem títulos e meta descrições de SEO às páginas de arquivo de termos de taxonomia. Estes são então utilizados no cabeçalho do documento.

Estou tentando exibir o título SEO dos termos de taxonomia como um H1 no meu modelo de arquivo de taxonomia.

Para fazer isso em uma postagem, o tipo ou a página da postagem é fácil:

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

Nos modelos de arquivo, isso não funciona.

Alguém sabe como fazer isso funcionar?

Exemplo de captura de tela

Este é o título de um termo de tag específico. Estou tentando exibir esse título - mas depois para um termo de taxonomia personalizado - nos meus modelos de arquivo.

A tela de edição do arquivo morto de tags

Código final

Foi isso que acabei usando no meu archive.phpmodelo. Funciona se você estiver usando uma taxonomia customizada. Para tags ou categorias, dê uma olhada na resposta de Mike Madern abaixo.

<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
fonte

Respostas:

19

Obter títulos de arquivamento SEO

Se você definiu um título de arquivo personalizado de Tipo de postagem, é possível:

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

echo apply_filters( 'the_title', $title );

Lembre-se de substituir POST_TYPEpor seu próprio tipo de postagem personalizada.

Para exibir todas as wpseo_titlevariáveis, você pode usar:

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

Assim, você pode escolher facilmente o que precisa.

Obter títulos de SEO a termo

Categorias

Usando esse código, você pode obter o título de SEO definido:

$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 );

Tag

Usando esse código, você pode obter o título de SEO definido:

$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 exibir todas as wpseo_taxonomy_metavariáveis, você pode usar:

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

Dessa forma, você pode ver a estrutura e as variáveis ​​disponíveis.

Mike Madern
fonte
Você adicionou o título em SEO > títulos e metas > Tipos de postagem ?
quer
Melhorei a minha resposta com a solução :-)
Mike Madern
Acho que você perdeu minha última edição: -PI adicionou uma versão com $tag_id.
quer
1
Muito obrigado pelo código, eu nunca seria capaz de descobrir isso. Fiz algumas pequenas alterações para que ele funcionasse com taxonomias personalizadas.
Mattvic
Isso é ótimo. Eu tive que usar get_queried_object()->term_id, em vez disso get_query_var(), como o primeiro retorna o id, o último retorna a lesma, fazendo o código emitir avisos de "índice indefinido". Além disso, ter o cuidado de verificar se existe é definido nada $meta['post_tag|category'], como você vai ter avisos índice indefinidas também. (WP 4.2.2, btw)
cabgfx
5

Na página de arquivo no loop post, adicione a seguinte linha de código para fazê-lo funcionar

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

Diga-me se está funcionando para você ou vou fornecer outra solução.

Vinod Dalvi
fonte
Infelizmente, isso não funcionou. Ele mostra o título de SEO da primeira postagem no arquivo. Provavelmente vou ter que mergulhar no banco de dados para ver onde esses dados estão armazenados.
Mattvic
Você está usando em loop? Você pode me mostrar o código?
Vinod Dalvi
Eu adicionei meu código. Não tenho certeza se expliquei que queria exibir o título da página, não os títulos de cada post no loop.
Mattvic
Era exatamente isso que eu estava procurando. Emite o título de SEO no loop. Além disso, substitui get_the_ID () por $ post-> ID
gerbz 8/08/2015
isso salva minha vida. bom ..
Mukii kumar
0

Obtendo a palavra - chave foco para categorias e tags

Para obter a palavra-chave focus de uma Categoria ou Tag programaticamente, você pode usar um destes dois 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'];
                }
            }

Essa é basicamente a abordagem usada por Mike no final de seu post.

ou

            /** 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' );
                }
            }

Costumo preferir a segunda abordagem, pois dessa forma não preciso buscar nem me preocupar em obter a opção meta sozinho.

No seu caso functions.php, você pode testar if class_exists( 'WPSEO_Taxonomy_Meta' )e, em seguida, talvez agrupar a função Yoast em uma função própria, para ser seguro, caso você pare de usar o Yoast SEO posteriormente.

Alguma experiência

Conforme mencionado na pergunta original, algo como get_post_meta( $tag->term_id, '_yoast_wpseo_focuskw', true);não funcionará para categorias e páginas (não retornará nada).

Então porque é isso?

Isso ocorre porque, para categorias e tags, a palavra-chave focus é salva em outro lugar no banco de dados. Em vez de ser salvo dentro da wp_postmetatabela, como de costume, ele é enterrado profundamente dentro da wp_optionstabela, como um objeto JSON.

Os métodos acima permitem acessar esses valores.


Por fim, se você é como eu e não consegue se lembrar do nome das taxonomias (por exemplo: não é óbvio por que as tags usam taxonomia post_tage não apenas tag, verifique os URLs ao editar uma categoria ou uma tag: ela será exibida …taxonomy=category…ou o gosto.

Fabien Snauwaert
fonte
0

Responder Obtendo a palavra-chave focus para categorias e tags

// funciona obrigado
// com resto api

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

plugin.in use o método 1

mudar de linha

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

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

Chaiiz Rataphan
fonte