REST API中的Query_vars支持

时间:2020-12-22 作者:Laurent

我正在尝试使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 );

1 个回复
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);
theposts_per_page 这只是一个jibberish示例,您可以创建/操作meta和/或tax查询等。。。

link 至使用中的过滤器。

相关推荐

如何在WordPress 4.7+中使用REST-API进行元查询?

我试图通过元查询进行过滤,但无论我尝试什么,我都无法使其工作。基本上,我希望通过rest API进行此查询:wp-json/wp/v2/books?meta_query[relation]=OR&meta_query[0][key]=arkivera&meta_query[0][value]=1&meta_query[0][compare]== 我尝试了几个不同的自定义字段,但它总是返回所有post对象。在我的函数文件中,我添加了:function api_allow_m