首页 文章

如何在Wordpress API回调中访问Yoast SEO标签

提问于
浏览
0

我正在开发一个带有ReactJS SPA主题的Wordpress网站,我试图在WP API AJAX调用期间从Yoast SEO插件中收集必要的SEO头标签 . 我使用Yoast的原因是因为它提供了seo值(即图像,描述, Headers 等),即使这些值没有在帖子上明确设置 .

在非SPA wordpress主题中,Yoast在wpseo_head()钩子中回显seo标签,这是由header.php中的wp_head()调用触发的 . 由于我正在实现SPA主题,我需要在每次更改网址时更新seo标记,但不会重新加载页面 . 我试图在WP API调用中捕获这些标记但由于某种原因,在API调用中,wpseo_head挂钩不会回显相同的标记 . 我运行了以下测试来确认行为的差异:

我在header.php文件中刚刚打开body标签后直接调用了wpseo_head():

<?php wp_head(); ?>
</head>
<body>
<div id="wpseo_head">
<?php do_action('wpseo_head'); ?>
</div>

这是相应的输出:

<div id="wpseo_head" class="baby">
 <!-- This site is optimized with the Yoast SEO plugin v7.7.2 - https://yoast.com/wordpress/plugins/seo/ -->
 <title>CORRECT PAGE TITLE</title>
 <!-- Admin only notice: this page does not show a meta description because it does not have one, either write it for this page specifically or go into the [SEO - Search Appearance] menu and set up a template. -->
 <link rel="canonical" href="CORRECT POST URL">
 <meta property="og:locale" content="en_US">
 <meta property="og:type" content="article">
 <meta property="og:title" content="CORRECT POST TITLE">
 <meta property="og:description" content="CORRECT DESCRIPTION">
 <meta property="og:url" content="CORRECT URL">
 <meta property="og:site_name" content="CORRECT SITE NAME">
 <meta property="article:publisher" content="CORRECT FACEBOOK URL">
 <meta property="og:image" content="CORRECT IMAGE URL">
 <meta property="og:image:width" content="200">
 <meta property="og:image:height" content="200">
 <script type="application/ld+json">{/* CORRECT JSON LD */}</script>
</div>

在我的api回调中加载帖子我捕获了wpseo_head()的输出并返回它 .

global $post, $wp_query;
$post = $_post;
$wp_query = new WP_Query(['p' => $_post->ID]);
setup_postdata($post);

ob_start();
do_action('wpseo_head');
$yoast_seo_tags = ob_get_contents();
ob_end_clean();
$yoastSeoTags = stripslashes($yoast_seo_tags);

这是来自api调用的响应:

<!-- This site is optimized with the Yoast SEO plugin v7.7.2 - https://yoast.com/wordpress/plugins/seo/ -->
<link rel="canonical" href="CORRECT POST URL" />
<script type='application/ld+json'>{/* CORRECT JSON LD */}</script>

请注意,header.php中wpseo_head()调用的输出已完成,但来自api回调中wpseo_head()调用的响应缺少许多字段,但确实包含正确的值 . 这让我相信,虽然我在api回调中正确设置帖子,但是在header.php和API回调中,wordpress行为必然存在一些固有的差异 .

1)任何人都可以解释一下这个以及如何在API回调中成功获取wpseo_head()调用的输出?

2)我已经尝试了其他几种方法来获取yoast SEO标签并且失败了,但我怀疑有更好的方法这样做,所以请随意建议替代方法 .

3)根据网络抓取工具目前的工作方式,每次用户导航到新页面时,我是否还需要担心设置SEO标签?或者只是简单地让SEO标签设置在INITIAL页面加载上就够了吗?

我试着通过以上对问题的描述详尽无遗,但如果您需要更多信息,请告诉我 . 提前感谢任何建议!我看到了一些类似的帖子,但没有一个答案让我找到了解决方案 . 再次感谢

1 回答

  • 0

    我遇到了同样的问题,你可以在这里找到一些额外的信息:https://github.com/Yoast/wordpress-seo/issues/9218所以他们正在使用rest api来请求必要的元信息 . 但是我们在WP内部有一个auth的问题(它需要用户在中间件的某处使用auth) . 所以我建议你使用这样的东西:

    $provider = new WPSEO_Indexable_Service_Post_Provider();
    $metainfo = $provider->get($selected_post->ID);
    

相关问题