如何在管理面板中快速重新排序将在wp-api中保留的帖子

时间:2016-05-03 作者:sheriffderek

我通常使用Intuitive Custom Post Order 我使用的任何WordPress网站的插件,以便客户端可以直观地排序他们的帖子。

对于这个项目,我使用WordPress作为管理面板,并使用余烬来使用它的数据。js前端。

(使用wp api V.2)重新排序的顺序不会显示在JSON中,我猜插件会将新的顺序存储在PHP的中间部分。

除了手动更改每篇帖子的日期外,我还有哪些选项可以让我的客户以直观的方式以持久的方式重新排序帖子?

2 个回复
SO网友:birgire

假设它将自定义订单存储到menu_order 中的列wp_posts 桌子

如果你指的是层次结构page post类型(支持页面属性),然后可以使用查询变量进行排序:

/wp-json/wp/v2/pages/?orderby=menu_order&order=asc
如果你是说post 职位类型:

/wp-json/wp/v2/posts/
有一种方法可以使用rest_{post_type}_query 过滤器:

/**
 * Set orderby to \'menu_order\' for the \'post\' post type
 */
add_filter( "rest_post_query", function( $args, $request )
{
    $args[\'orderby\'] = \'menu_order\';
    return $args;
}, 10, 2 );
我们可能想进一步限制这一点。浏览WP_REST_Request 课堂上我们可以看到get_param() 我们可以利用的公共方法:

/**
 * Support for \'wpse_custom_order=menu_order\' for the \'post\' post type
 */
add_filter( "rest_post_query", function( $args, $request )
{
    if( \'menu_order\' === $request->get_param( \'wpse_custom_order\' ) )
        $args[\'orderby\'] = \'menu_order\';

    return $args;
}, 10, 2 );
我们通过自定义wpse_custom_order 参数:

/wp-json/wp/v2/posts/?wpse_custom_order=menu_order&order=asc
还有动态生成的rest_query_var-orderby 滤器

SO网友:Ahed Eid

使用menu\\U order作为orderby参数排序帖子将出现无效的参数错误,例如。

http://example.com/wp-json/wp/v2/posts?orderby=menu_order&order=asc

Invalid parameter(s): orderby (orderby is not one of date, id, include, title, slug)

此时,没有用于添加另一个orderby选项的筛选器https://github.com/WP-API/WP-API/blob/2.0-beta13/lib/endpoints/class-wp-rest-posts-controller.php#L1666

你应该在posts_clauses 例如

/**
 * Class Custom_Rest
 * @author 
 */
class Custom_Rest
{
    /**
     * init 
     * Add Rest Hooks
     *
     * @return void
     * @author 
     */
    public static function init()
    {
        add_filter( \'posts_clauses\' , \'Custom_Rest::orderby\' );
    }


    /**
     * orderby
     * Order posts by menu_order
     *
     * @return void
     * @author 
     */
    public static function orderby($v) {

        if ( $GLOBALS[\'wp\']->query_vars[\'rest_route\'] == \'/wp/v2/posts\' ) {
            // old value is  "wp_posts.post_date DESC"
            $v[\'orderby\'] = str_replace(\'post_date\', \'menu_order\', $v[\'orderby\']);
            return $v;
        }

    }

}


add_action( \'rest_api_init\', \'Custom_Rest::init\' );

相关推荐

Orderby定制字段不起作用

此代码是按管理页面中的ACF字段排序的。它实际上按自定义字段过滤,但不按顺序排序。字段中的数据是字符串而不是数字,因此我认为orderby meta\\u值是正确的。我确保这个键不是空的,我尝试了所有这些术语(desc、desc、asc、asc)$query->query_vars[\'order\'] function my_author_filter_results($query){ global $pagenow; if ( $pagenow === \