php - 带有片段变量的 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 获得答案,但无济于事。
解决方案
我在处理客户的网站时遇到了类似的情况。这个插件解决了我的问题。
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);
}
推荐阅读
- sql - 将不同表中的多个查询结果合并为一张查询结果表
- c++ - 如何在 WebView2 上启用扩展
- android - 如何在 Flutter 中同时为 android 和 iOS 进行人脸 id 身份验证
- android - 我创建了一个通知频道,但在 Android 10 上收到“频道不存在”或“频道无效”的错误消息
- php - 为什么浮点运算(具有精度损失)呈现不一致?
- android - 如何在firebase实时数据库中优化上传数据的速度
- java - 为什么Java编译器不提供调用者的行号信息?
- google-apps-script - MailApp.sendEmail =:在通过 MailApp 发送电子邮件之前验证用户输入电子邮件的可用性
- android - 为什么作者在项目中又添加了 tasksRepository ?: ?
- sql - 从雪花 JSON 列中检索值