【问题标题】:How to include Yoast SEO data in Wordpress Custom Endpoint如何在 Wordpress 自定义端点中包含 Yoast SEO 数据
【发布时间】:2020-05-12 08:59:27
【问题描述】:

我有一个按照官方guide 创建的自定义端点 在其中,我只是通过 slug (name) 获取帖子,如下所示:

if ( $posts = get_posts( array(
    'name' => $slug,
    'post_type' => 'post',
    'post_status' => 'publish',
    'posts_per_page' => 1
) ) ) $post = $posts[0];

if ( empty( $post ) ) {
    return null;
}

准备响应以添加更多关于作者的数据,准备一些自定义字段等。

我面临的问题是我们添加了 Yoast SEO 插件,并且在标准 WP REST API 中包含 yoast_head,但在自定义端点中却没有。

我发现了这个article,它列出了 SEO 数据包含在标准 REST API 中,并且有一个用于获取 SEO 数据的自定义端点

示例: https://example/wp-json/yoast/v1/get_head?url=https://example.com/hello-world/

这意味着我需要提出一个额外的请求才能获取 SEO 数据。

我还尝试激活 WP REST Yoast Meta 插件但没有成功,因为它在获取常规 WP REST 时抛出错误,并且对自定义插件没有影响 p>

有没有办法在自定义端点中获取 yoast_head

【问题讨论】:

  • 生成它的源代码非常复杂且嵌套,最好的办法是在函数中使用 get_head 端点并使用 php get 请求来附加数据
  • 我没有时间编写完整的可测试答案,但您可以在自己的代码中本地使用 Yoast 的 API。不幸的是,Yoast 正在/经历了重写,因此如果您不知道他们是如何进行 DI 的,他们的代码可能并不明显,但是他们仍然有一个 legacy version in their deprecated section 应该可以为您提供您需要使用的代码。显然,所有关于使用明确标记为已弃用的代码的警告都适用。

标签: php wordpress rest wordpress-rest-api


【解决方案1】:

我有同样的问题,这对我有用,我希望它对你有帮助。 Meta_Surface 类为访问任何帖子或页面的头部提供了一个帮助器。

  if (function_exists('YoastSEO')) {
        $meta_helper = YoastSEO()->classes->get(Yoast\WP\SEO\Surfaces\Meta_Surface::class);
        $meta = $meta_helper->for_post($pid);
        $query->post->yoast_head = $meta->get_head();
    }

【讨论】:

  • 谢谢!正是我正在搜索的内容。
【解决方案2】:

这是你需要的,我遇到了同样的问题,有人为此目的编写了这个代码:

https://wordpress.org/plugins/wp-rest-yoast-meta/

随时通知我!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-05
    • 1970-01-01
    • 2016-04-22
    • 2023-03-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多