是否向自定义POST类型的REST API请求添加自定义参数?

时间:2021-10-12 作者:icolumbro

我注册了一个名为wasb_message 具有show_in_rest 设置为truerest_base 设置为\'messages\' 因此,可以在端点处访问资源https://mydomain/wp-json/wp/v2/messages(使用WP_REST_Posts_Controller 类)。自定义post类型有一个名为wasb_status 对于整数值,如何添加自定义参数,以便在对端点执行get请求时https://mydomain/wp-json/wp/v2/messages?status=2我使用wasb_status 等于2而不注册新路由?

我读过this code reference pagethis old question 但我无法让它工作,使用邮递员发送我收到的get请求:

{
    "code": "rest_invalid_param",
    "message": "Parametro(i) non valido(i): status",
    "data": {
        "status": 400,
        "params": {
            "status": "Stato non consentito."
        },
        "details": {
            "status": {
                "code": "rest_forbidden_status",
                "message": "Stato non consentito.",
                "data": {
                    "status": 401
                }
            }
        }
    }
}

2 个回复
SO网友:Tami

根据Haris的回复,应该是这样的:

function wasb_rest_parameter($args, $request) {
    if( isset($request["wasb_status"]) && is_numeric($request["wasb_status"]) ) {
        $args[\'meta_key\'] = \'wasb_status\';
        $args[\'meta_value\'] = intval($request["wasb_status"]);
    }       
 
    return $args;
}
add_filter(\'rest_wasb_message_query\', \'wasb_rest_parameter\', 10, 2);
尚未测试。如果不起作用,将更新答案。

SO网友:icolumbro

我解决了以下问题this answer 和写作:

public function query_wasb_messages_by_status( $args, $request ) {

        if ( ! is_null( $request->get_param( \'message_status\' ) ) ) {
            $args[\'meta_query\'] = array(
                \'_wasb_message_status\' => array(
                    \'key\'     => \'_wasb_message_status\',
                    \'value\'   => (int) $request->get_param( \'message_status\' ),
                    \'compare\' => \'=\',
                    \'type\'    => \'numeric\'
                )
            );
        }

        return $args;

    }
add_filter( \'rest_wasb_message_query\', array( $this, \'query_wasb_messages_by_status\'), 10, 2 );
我的问题是我用过status 作为参数名称,但status 已存在帖子(“草稿”、“已发布”等)所以我把名字改成message_status...

相关推荐

如何在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