我需要返回所有具有保存在自定义块属性gutenberg中的特定属性值的帖子。查询中的此值将根据以下端点。
http://idinheiro.local/wp-json/idinheiro/v1/blocks-posts/id-here-attribute-gutenberg-block
下面是我的回调函数。简而言之,如何查找此属性并将其放在get\\u帖子中?
Register routers
public function register_routes() {
$namespace = \'idinheiro/v1\';
$path = \'blocks-posts\';
register_rest_route( $namespace, \'/\' . $path . \'/(?P<id>[A-Za-z0-9_-]+)\', [
[
\'methods\' => \'GET\',
\'callback\' => [$this, \'get_items\'],
\'permission_callback\' => [$this, \'get_items_permissions_check\'],
],
]);
}
Response data
public function get_items($request) {
$args = [
\'post_status\' => \'publish\',
\'post_type\' => \'post\',
\'s\' => \'cgb/block-idinheiro-blocks\',
];
$posts = get_posts($args);
if (empty($posts)) {
return new WP_Error( \'empty_post\', \'there is no blocks inside on posts\', [ \'status\' => 404 ] );
}
$data = [];
$i = 0;
foreach ($posts as $post) {
$data[$i][\'id\'] = $request[\'id\'];
$data[$i][\'post_id\'] = $post->ID;
$data[$i][\'post_name\'] = $post->post_title;
$data[$i][\'post_url\'] = get_permalink($post->ID);
$i++;
}
wp_reset_postdata();
return new WP_REST_Response($data, 200);
}
我想到了这样的事情。或者如果你有其他解决办法,我会很感激的
$args = [
\'post_status\' => \'publish\',
\'post_type\' => \'post\',
\'s\' => \'cgb/block-idinheiro-blocks\',
\'value_attribute_my_block\' = $request[\'id\']
];
$posts = get_posts($args);
最合适的回答,由SO网友:Tom J Nowell 整理而成
You don\'t. 这不是块属性的工作方式,也不是它们的用途。
块属性属于该块,编辑器使用该属性生成该块的HTML,但一旦它们保存在数据库中,它们就是HTML。数据库中没有块表,没有块属性的映射/索引,帖子内容就是帖子内容。
因此,按块上的属性查询帖子等同于按短代码上的参数或超链接上的属性查询帖子。这没有道理,这不是他们想要的,你犯了一个错误。
相反,如果你想用X、Y或Z查询帖子,你需要一个分类法。Post-meta也可以工作,但有很大的性能成本块属性不会
您所能做的最好的,也是最接近的,就是获取所有帖子,同时将其加载到内存中,将帖子内容解析为块,处理这些块以找到您要查找的块类型,检查其属性,并将其添加到列表中。
这将非常缓慢,将并发访问者的数量限制在少数,并将站点上的最大帖子数量限制在100以下。如果出现更多重大的性能和扩展问题,您将面临内存不足错误或时间不足错误的风险。