我正在尝试使query\\u vars在rest api中工作。如果我打电话wp-json/wp/v2/cpt?city=test
, 我的调试输出总是返回一个空字符串。
<?php
/**
* Plugin Name: Test
* Author: Gecka <[email protected]>
* License: GNU General Public License v3 or later
* License URI: http://www.gnu.org/licenses/gpl-3.0.html
*/
function cpt_init() {
$args = [
\'label\' => \'Custom post\',
\'supports\' => [ \'title\', \'revisions\', \'custom-fields\' ],
\'show_in_rest\' => true,
\'hierachical\' => false,
\'public\' => true,
\'exclude_from_search\' => true,
\'show_ui\' => true,
];
register_post_type( \'cpt\', $args );
}
add_action( \'init\', \'cpt_init\' );
function cpt_register_query_vars( $vars ) {
$vars[] = \'city\';
return $vars;
}
add_filter( \'query_vars\', \'cpt_register_query_vars\' );
function cpt_posts_where( $where, WP_Query $wp_query ) {
if(\'cpt\' !== $wp_query->get(\'post_type\') ) {
return $where;
}
// debug output
var_export( $wp_query->get(\'city\') );
return $where;
}
add_filter( \'posts_where\', \'cpt_posts_where\', null, 2 );
SO网友:honk31
如果我错了,请纠正我,但在REST请求中不会处理查询变量。但还有其他方法可以实现这一目标。不是很确定,这是否有助于解决你的问题,但希望这至少是朝着正确的方向推进
function so380236_rest_cpt_query($args, $request)
{
$query_params = $request->get_query_params();
if (!array_key_exists(\'city\', $query_params)) {
//$args is your WP_Query[$args] array
//example:
$args[\'posts_per_page\'] = 12;
}
return $args;
}
add_filter(\'rest_cpt_query\', \'so380236_rest_cpt_query\', 10, 2);
the
posts_per_page
这只是一个jibberish示例,您可以创建/操作meta和/或tax查询等。。。
link 至使用中的过滤器。