2017-12-19 21 views
0

私はいくつかのリクエストでapiとして動作するようにプラグインを作成しました。その構造は次のとおりです。apiプラグインの中でwordpress関数を使用できません

add_action('rest_api_init', 'registerRoute'); 

function registerRoute() { 
    register_rest_route('test/v1/', 'mobile', array(
     'methods' => 'POST', 
     'callback' => array(new testApi(), $_POST['action']), 
    )); 
} 

class testApi 
{ 
....... 
public function getProduct() 
{ 
    $post_id = 123; 
    var_dump(wc_get_product($post_id));exit; 
} 
....... 
} 

上記のコードでは、wc_get_product returns boolean(false)です。私はつまり、彼らは任意の値を返すかどうかを確認するために、他のワードプレスの機能を試してみました:

get_post($post_id);

ヌル

wp_get_current_user();

と、これは以下を返す:

object(WP_User)#1772 (7) { 
    ["data"]=> 
    object(stdClass)#1773 (0) { 
    } 
    ["ID"]=> 
    int(0) 
    ["caps"]=> 
    array(0) { 
    } 
    ["cap_key"]=> 
    NULL 
    ["roles"]=> 
    array(0) { 
    } 
    ["allcaps"]=> 
    array(0) { 
    } 
    ["filter"]=> 
    NULL 
} 

だから、私はいくつかのオンライン検索を行なったし、私のファイル上のコードのこの部分を追加しました:私はABSPATHをエコーすると

require_once(ABSPATH . 'wp-load.php'); 

、それは私のパス文字列を与えません。また、$wpdbオブジェクトを使用することもできます。

上記のような製品IDで製品オブジェクトを取得できないのはなぜかと思います。製品は予約可能な製品であり、依然としてデータベースに存在します。

ここに間違いがありましたら教えてください。

答えて

0

Productオブジェクトの表示がjson_decode();

add_action('rest_api_init', 'registerRoute'); 

function registerRoute() { 
    register_rest_route('test/v1/', 'mobile', array(
     'methods' => 'POST', 
     'callback' => array(new testApi(), $_POST['action']), 
    )); 
} 

class testApi 
{ 

public function getProduct() 
{ 


    global $product; 
    $_product = wc_get_product('215'); 

    $response = array(
      "result"=>true, 
      "data" => json_decode($_product), 
      "message"=>'Single Product' 
      ); 

    return $response; 
} 

} 
を使用しました
関連する問題