在存档模板中显示Yoast WordPress SEO标题


14

Yoast的WordPress SEO插件允许用户向分类学术语存档页面添加SEO标题和元描述。然后将其用于文档的开头。

我正在尝试将分类术语的SEO标题显示为我的分类档案模板中的H1。

要在帖子,帖子类型或页面中做到这一点很容易:

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

在存档模板上,此功能无效。

有谁知道如何使它工作?

屏幕截图示例

这是特定标签术语的标题。我正在尝试在我的存档模板中显示此标题-但随后显示一个自定义分类术语。

标签归档编辑画面

最终代码

这就是我最终在archive.php模板中使用的内容。如果您使用的是自定义分类法,则此方法有效。对于标签或类别,请查看下面的Mike Madern的答案。

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

Answers:


19

获取存档SEO标题

如果定义了“自定义帖子类型”存档标题,则可以通过以下方式获得该标题:

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

echo apply_filters( 'the_title', $title );

请记住POST_TYPE用您自己的自定义帖子类型替换。

要显示所有wpseo_title变量,可以使用:

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

因此,您可以轻松选择所需的那个。

获取术语SEO标题

分类目录

通过使用以下代码,您可以获得定义的SEO标题:

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

标签

通过使用以下代码,您可以获得定义的SEO标题:

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

要显示所有wpseo_taxonomy_meta变量,可以使用:

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

这样,您可以看到结构和可用变量。


您在SEO中添加了标题> 标题和元 > 帖子类型
Mike Madern 2013年

我通过解决方案改善了答案:-)
Mike Madern 2013年

我猜您错过了我最后的帖子编辑:-PI添加了带有的版本$tag_id
Mike Madern 2013年

1
非常感谢您的代码,我永远无法弄清楚。我进行了一些小的更改,以使其能够与自定义分类法一起使用。
Mattvic

这很棒。我必须使用get_queried_object()->term_id,而不是使用,get_query_var()因为前者返回id,后者返回子弹,使代码抛出“未定义索引”的提示。此外,应注意检查是否有什么在集$meta['post_tag|category'],您会得到未定义指数告示为好。(WP 4.2.2,btw)
cabgfx

5

在发布循环的存档页面上,添加以下代码行使其生效

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

告诉我它是否对您有用,否则我将提供其他解决方案。


不幸的是,这没有用。它显示档案中第一篇文章的SEO标题。我可能不得不深入数据库才能查看该数据的存储位置。
马特维克

您是否在循环使用它?你能告诉我代码吗?
Vinod Dalvi

我添加了我的代码。不知道我是否解释过要输出页面标题,而不是循环中每个帖子的标题。
Mattvic

这正是我想要的。在循环中输出SEO标题。另外,我用$ post-> ID代替了get_the_ID()
gerbz 2015年

这可以挽救我的生命。好..
Mukii kumar

0

获取类别和标签的焦点关键字

要以编程方式获取“ 类别”或“标签” 的焦点关键字,可以使用以下两种方法之一:

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

基本上,这是Mike在其帖子末尾使用的方法。

要么

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

我倾向于第二种方法,因为这样一来,我不必自己获取或担心获取meta选项。

在您的中functions.php,您可能需要进行测试if class_exists( 'WPSEO_Taxonomy_Meta' ),然后将Yoast函数包装到您自己的功能中,以确保安全,以防万一您停止使用Yoast SEO。

一些背景

正如原始问题中提到的,类似的东西get_post_meta( $tag->term_id, '_yoast_wpseo_focuskw', true);不适用于类别和页面(它不会返回任何内容。)

那为什么呢?

这是因为,对于类别和标签,focus关键字保存在数据库中的其他位置。它不是wp_postmeta像往常一样保存在表中,而是wp_options作为JSON对象埋在表的深处。

上面的方法使我们可以访问这些值。


最后,如果您像我一样,不记得分类法的名称(例如,不清楚为什么标记使用分类法post_tag,而不仅仅是tag,请在编辑类别或标记时查看URL:它将显示…taxonomy=category…或类似。


0

回复获取类别和标签的焦点关键字

//工作正常,谢谢
//使用rest api

得到/ wp-json / wp / v2 / categories?slug =slug_name

plugin.in使用方法1

换线

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.