2016-05-20 6 views
0

WordPressアプリケーションへのローカルホスト要求で、 "wp rest api v2"は問題なく期待どおり動作しています。ローカルホストの投稿要求の例を次に示します。Wordpress wp rest api v2エラー400(不正なリクエスト) "オブジェクト{コード:" rest_invalid_param "、メッセージ:"無効なパラメータ:id "、データ:オブジェクト}

POST "http://127.0.0.1/plugin"名前空間/プラグイン名/ wp-json /プラグイン名前空間/残りのAPI URL「

しかし、私のホストされたサイト上の要求は私のホストされたサイトに、同様の要求を、エラーを返して:

POST」のhttp://my-domain.com/plugin-name/wp-json/plugin名前空間/休憩APIのURL」

私はクロムコンソールに乗る "400(悪いRequest)" オブジェクト{コード: "rest_invalid_param" メッセージ: "無効なパラメータ(複数も可):ID"、データ:オブジェクト}

$ http.post(url、{id:1、shortMessage: "abc"}、{ヘッダー:{'X-WP-Nonce':「私のnonce値」は、 }})); //角の$ httpを使用して投稿要求を作成しています

私は上記のURLの様子を書いています。私が書いた私のプラグインのPHPコードで

function myplugin_register_endpoints(){ 

register_rest_route(

    'plugin namespace', 
    '/rest of the api url', 
    array(
     'methods' => 'POST', 
     'callback' => 'my_end_point', 
     'args' => array(
       'id' => array(
        'required' => true, 
        'validate_callback' => function($param, $request, $key) { 
         return is_numeric($param) and ! is_null(get_post($param));//numeric post id value and there is valid post for this id 
        }, 
        'sanitize_calback' => 'absint' 
       ) 
     ), 
     'permission_callback' => function (WP_REST_Request $request) { 

      if(!is_user_logged_in()){ 
       return new WP_Error('login error',__('You are not logged in','blabla')); 
      } 
      return true; 

     } 
    ) 

); 
} 

add_action('rest_api_init','myplugin_register_endpoints'); 

function my_end_point(WP_REST_Request $request) { 

    global $current_user; 
    $current_user = wp_get_current_user(); 

    if($my_var){ 
     return array('message' => $message,'items' => $items,'item'=>$item); 
    } else { 
     return new WP_Error('add friend error',__('message'),$request['id']); 
    } 
} 

私は、要求が私のホストされたサイト上で失敗している理由を理解する必要があります。

おかげ K

答えて

0

は、私は私のミスを発見しました。

リターンIS_NUMERIC($のPARAM)と:

は、それがこのラインにありました! IS_NULL(get_post($のPARAM)); //数値ポストid値と、私はそれを変更し

このIDの有効な投稿があり:

リターンIS_NUMERIC($のparamは)。

これは、 'validate_callback'ロジックを変更せずにregister_rest_route(...){...}部分をコピーしてコピーしたために起こりました。

この 'validate_callback'のパラメータは、投稿IDではないユーザーIDです。したがって、paramがポストID(...および!is_null(get_post($ param)); ...)であるかどうかをチェックする部分は、このエンドポイントには関係ありません。 したがって、このチェックを省略した後、エンドポイントは 'validate_callback'を渡してエラーを返さなくなりました。

関連する問題