简体   繁体   中英

Wordpress REST API: How to retrieve posts tagged by multiple tags?

Some people suggested using /posts?tags=tag_id_1,tag_id_2 or /posts?tags[]=tag_id_1&tags[]=tag_id_2 but wordpress seems to be returning posts that are tagged either with tag1 OR tag2. What I actually need is posts tagged with tag1 AND tag2.

Anyone has an idea?

I will share with you what I have done.

I created a new endpoint for my custom needs, which ends like 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'
  ));
});

Then, created

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);
}

This will return only the PostID, Post Title and Post Content with HTML formatting for direcr reuse. Hope this solves your question.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM