首页 > 解决方案 > 带有片段变量的 Wordpress API Yoast 默认站点标题未保存

问题描述

我正在使用带有 WP-API 的无头 WordPress。

所以,我在 API 中公开了 yoast 数据。像这样:

'yoast_wpseo_title' => wpseo_replace_vars(get_post_meta($post->ID, '_yoast_wpseo_title', true), $post)

我在搜索外观 - > 内容类型下为我的每个帖子类型设置了带有片段变量的默认 SEO 标题。

默认值

奇怪的是,如果修改了帖子的上述默认 seo 标题,它似乎会保存,并且此函数会返回正确的标题。

但如果默认标题未编辑,则上述函数返回 null。此外,如果我将标题编辑回默认值,它也会返回 null。

在使用标准 PHP 函数直接呈现这些字段时,我不会在常规 WordPress 网站上遇到这种情况。

注意:我了解这是特定于插件的。我试图从 Yoast 上的 wordpress 论坛以及 wordpress stackexchange 获得答案,但无济于事。

标签: phpwordpresswp-apiyoast

解决方案


我在处理客户的网站时遇到了类似的情况。这个插件解决了我的问题。

https://github.com/niels-garve/yoast-to-rest-api

这会自动将我想要的三个主要属性暴露给 api。在上述插件之后,我使用下面的函数按类别获取帖子,来自 Yoast 的内容会自动插入到响应中。

function get_category_posts($request) {
    $args = array(
        'category_name' => $request['category_name'],
        'posts_per_page' => $request->get_param( 'per_page' ),
        'offset' => ($request->get_param( 'page' )-1),
        'orderby' => $request->get_param( 'orderby'),
        'order' => $request->get_param( 'order' ),
    );

    $query = get_posts($args);

    if (empty($query)) {
        return new WP_Error( 'empty_category', 'there is no post in this category', array('status' => 404) );
    }

    $formatController = new WP_REST_Posts_Controller('post');

    $posts = array();
    foreach( $query as $post) {
        $data    = $formatController->prepare_item_for_response( $post, $request );
        $posts[] = $formatController->prepare_response_for_collection( $data );
    }

    return rest_ensure_response($posts);
}

推荐阅读