WordPress REST API:如何检索被多个标签标记的帖子?

zmeyuzjn  于 2023-05-16  发布在  WordPress
关注(0)|答案(2)|浏览(184)

有些人建议使用/posts?tags=tag_id_1,tag_id_2/posts?tags[]=tag_id_1&tags[]=tag_id_2,但wordpress似乎返回的帖子标记为tag1或tag2。我真正需要的是用tag1和tag2标记的帖子。
有人有主意吗?

zysjyyx4

zysjyyx41#

我将与你分享我所做的。
我根据自定义需要创建了一个新端点,其结尾类似于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格式以供直接重用。希望这能解决你的问题。

wn9m85ua

wn9m85ua2#

你可以很容易地做到这一点,事实证明:
/posts?tags[operator]=AND&tags[terms]=tag_id_1,tag_id_2

相关问题