使用wp API 2.0获取所有标签,而不仅仅是前10个标签

时间:2016-06-18 作者:Ezeewei

如果我这样做了/wp-json/wp/v2/tags 我只能拿到前10个per_page=0 不再使用它来获取实际的所有标签。

任何人都知道如何使用wp-api 2.0?

1 个回复
最合适的回答,由SO网友:birgire 整理而成

如果我们看看WP_REST_Controller::get_collection_params() 方法,我们可以看到最小值1 最大值为100:

\'per_page\' => array(
    \'description\'        => __( \'Maximum number of items to be returned in result set.\' ),
    \'type\'               => \'integer\',
    \'default\'            => 10,
    \'minimum\'            => 1,
    \'maximum\'            => 100,
    \'sanitize_callback\'  => \'absint\',
    \'validate_callback\'  => \'rest_validate_request_arg\',
),
如果我们检查CHANGELOG.md我们找到的文件:

- Enforces minimum 1 and maximum 100 values for `per_page` parameter.

(props @danielbachhuber,
[#2209](https://github.com/WP-API/WP-API/pull/2209))
我们看到这与问题有关#1609 其中@rmccuecomment 是:

您应该能够筛选rest_endpoints 并更改其中的最大值。这可能会更容易,但理想情况下,您不应该改变这一点。

这个rest_endpoints 过滤器应用于WP_REST_Server::get_routes() 方法:

/**
 * Filters the array of available endpoints.
 *
 * @since 4.4.0
 *
 * @param array $endpoints The available endpoints. An array of matching regex patterns,
 *                         each mapped to an array of callbacks for the endpoint. 
 *                         These take the format
 *                         `\'/path/regex\' => array( $callback, $bitmask )` or
 *                         `\'/path/regex\' => array( array( $callback, $bitmask ).
 */
 $endpoints = apply_filters( \'rest_endpoints\', $this->endpoints );
例如,我们可以尝试:

/**
 * Change the maximum of per_page for /wp/v2/tags/ from 100 to 120
 */
add_filter( \'rest_endpoints\', function( $endpoints )
{
    if( isset( $endpoints[\'/wp/v2/tags\'][0][\'args\'][\'per_page\'][\'maximum\'] ) )
        $endpoints[\'/wp/v2/tags\'][0][\'args\'][\'per_page\'][\'maximum\'] = 120;

    return $endpoints;  
} );
另一种方法是通过rest_post_tag_query 过滤器:

/**
 * Fix the per_page to 120 for the post tags query of get_terms()
 */
add_filter( \'rest_post_tag_query\', function( $args, $request )
{
    $args[\'number\'] = 120;
    return $args;
}, 10, 2 );
您可能需要根据自己的需要进一步调整此选项。

请注意,此默认限制per_page 如果您的安装有大量条款,则可以“保护”您的服务器免受高负载的影响。