基于属性 gutenberg 块的自定义端点 API
Custom Endpoint API based on attribute gutenberg block
浏览了 4 次
0
我需要 return 所有具有保存在自定义块属性 gutenberg 中的特定属性值的帖子。查询中的这个值将根据下面的端点。
http://idinheiro.local/wp-json/idinheiro/v1/blocks-posts/id-here-attribute-gutenberg-block
在我的回调函数下面。简而言之,如何查找此属性并将其放入 get_posts?
注册路由器
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'],
],
]);
}
响应数据
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);
根据您提供的代码,这里有一个可能解决您问题的潜在解决方案:
在您的自定义块 cgb/block-idinheiro-blocks
中,您可以在 php/your 主插件文件中将 value_attribute_my_block
属性源设置为 meta if the block is only used once per a post/page (multiple can be restricted in the attributes - the default is true, set to false). NB. your meta field must be registered with register_post_meta(),否则该值将不会保存。
将值存储为 post_meta
使您能够使用强大的元查询轻松地将 post 检索到您的函数 get_items()
中。这种策略避免了必须解析 post 的内容,因为默认情况下保存块属性是序列化的。在您当前的查询 $args
中,您的 's'
参数会在块中找到 posts,但仍必须解析属性的值,这将是一个替代方案,但可能不像 fast/performant 作为元查询。
浏览了 4 次
0
我需要 return 所有具有保存在自定义块属性 gutenberg 中的特定属性值的帖子。查询中的这个值将根据下面的端点。
http://idinheiro.local/wp-json/idinheiro/v1/blocks-posts/id-here-attribute-gutenberg-block
在我的回调函数下面。简而言之,如何查找此属性并将其放入 get_posts?
注册路由器
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'],
],
]);
}
响应数据
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);
根据您提供的代码,这里有一个可能解决您问题的潜在解决方案:
在您的自定义块 cgb/block-idinheiro-blocks
中,您可以在 php/your 主插件文件中将 value_attribute_my_block
属性源设置为 meta if the block is only used once per a post/page (multiple can be restricted in the attributes - the default is true, set to false). NB. your meta field must be registered with register_post_meta(),否则该值将不会保存。
将值存储为 post_meta
使您能够使用强大的元查询轻松地将 post 检索到您的函数 get_items()
中。这种策略避免了必须解析 post 的内容,因为默认情况下保存块属性是序列化的。在您当前的查询 $args
中,您的 's'
参数会在块中找到 posts,但仍必须解析属性的值,这将是一个替代方案,但可能不像 fast/performant 作为元查询。