这是mentioned link 如果我们想使用元值来订购rest API内容:
// Add meta your meta field to the allowed values of the REST API orderby parameter
add_filter(
\'rest_\' . $post_type . \'_collection_params\',
function( $params ) {
$params[\'orderby\'][\'enum\'][] = \'YOUR_META_KEY\';
return $params;
},
10,
1
);
// Manipulate query
add_filter(
\'rest_\' . $post_type . \'_query\',
function ( $args, $request ) {
$order_by = $request->get_param( \'orderby\' );
if ( isset( $order_by ) && \'YOUR_META_KEY\' === $order_by ) {
$args[\'meta_key\'] = $order_by;
$args[\'orderby\'] = \'meta_value\'; // user \'meta_value_num\' for numerical fields
}
return $args;
},
10,
2
);
但我想按元表中不包含的字段对rest API内容进行排序。
表格结构:
id views
-- -----
1 5
2 2
3 20
4 1
我想在此表中按视图降序排列rest API帖子
为此,我编辑了“操纵查询”部分,以便创建一个按视图排序ID的数组。(执行我在中使用的解决方案的排序
this post)<那我就用
post__in
在args中,使用我之前创建的数组作为其参数,然后使用
post__in
像
orderby
参数:
// Manipulate query
add_filter(
\'rest_\' . $post_type . \'_query\',
function ( $args, $request ) {
//create an array that have ids that are sorted by views
global $wpdb;
$post_views = $wpdb->get_results( $wpdb->prepare("SELECT id, views FROM " . $wpdb->prefix . "mytable") );
$views = array_column($post_views, \'views\');
array_multisort($views, SORT_DESC, $post_views);
$most_viewd = array_column($post_views, \'id\');
$order_by = $request->get_param( \'orderby\' );
if ( isset( $order_by ) && \'views\' === $order_by ) {
$args[\'post__in\'] = $most_viewd;
$args[\'orderby\'] = \'post__in\';
}
return $args;
},
10,
2
);