有些人建议使用/posts?tags=tag_id_1,tag_id_2或/posts?tags[]=tag_id_1&tags[]=tag_id_2,但wordpress似乎返回的帖子标记为tag1或tag2。我真正需要的是用tag1和tag2标记的帖子。有人有主意吗?
/posts?tags=tag_id_1,tag_id_2
/posts?tags[]=tag_id_1&tags[]=tag_id_2
zysjyyx41#
我将与你分享我所做的。我根据自定义需要创建了一个新端点,其结尾类似于myapi/v1/posts/tag1/tag2
myapi/v1/posts/tag1/tag2
add_action('rest_api_init', function () { register_rest_route( 'myapi/v1', 'posts/(?P<tag_1>[-\w]+)/(?P<tag_2>[-\w]+)',array( 'methods' => 'GET', 'callback' => 'get_posts_set' )); });
然后,创建了
function get_posts_set($request) { $args = array( 'category_name' => $request['category_name'], 'tag_slug__and' => array( $request['tag_1'],$request['tag_2'] ), ); $posts = get_posts($args); if (empty($posts)) { return new WP_Error( 'empty_category', 'there is no post in this category', array('status' => 404) ); } // Following code is my processing of output. Customize it to suit your needs $post_data = array(); $i = 0; foreach( $posts as $post) { $post_id = $post->ID; $post_title = remove_html_comments($post->post_title); $post_content = remove_html_comments($post->post_content); $post_data[ $i ][ 'id' ] = $post_id; $post_data[ $i ][ 'title' ] = $post_title; $post_data[ $i ][ 'content' ] = $post_content; $i++; } $response = new WP_REST_Response($post_data); $response->set_status(200); return $response; } function remove_html_comments($content = '') { return preg_replace('/<!--(.|\s)*?-->/', '', $content); }
这将只返回PostID,帖子标题和帖子内容,并带有HTML格式以供直接重用。希望这能解决你的问题。
wn9m85ua2#
你可以很容易地做到这一点,事实证明:/posts?tags[operator]=AND&tags[terms]=tag_id_1,tag_id_2
/posts?tags[operator]=AND&tags[terms]=tag_id_1,tag_id_2
2条答案
按热度按时间zysjyyx41#
我将与你分享我所做的。
我根据自定义需要创建了一个新端点,其结尾类似于
myapi/v1/posts/tag1/tag2
然后,创建了
这将只返回PostID,帖子标题和帖子内容,并带有HTML格式以供直接重用。希望这能解决你的问题。
wn9m85ua2#
你可以很容易地做到这一点,事实证明:
/posts?tags[operator]=AND&tags[terms]=tag_id_1,tag_id_2