WP REST API GET方法有效,但POST方法无效

时间:2022-03-04 作者:user583713

我只是想学习如何与WordPress Gutenberg一起发展。GET方法没有问题,但是post方法会导致错误消息,没有找到与URL和request方法匹配的路由。如何使用POST方法发送数据?对于这么简单的事情来说,走进商店有点难。

编辑js公司

export default function Edit({attributes, setAttributes }) {

const { getCurrentPostId } = wp.data.select("core/editor");

const onPriceChange = (new_price) =>{
setAttributes({price:new_price});

if(document.readyState != \'loading\'){
    woobergSendRequest(new_price);
}else {
    document.addEventListener(\'DOMContentLoaded\', woobergSendRequest);
}

}

function woobergSendRequest(new_price){

const post_id = getCurrentPostId();
const get_url = \'wooberg/v2/product?_method&product_id=\'+post_id+\'&product_price=\'+new_price;
console.log(post_id);

const sendData = {product_id:459,product_price:1.00};

apiFetch( {
    path: \'wooberg/v2/product\',
    method:\'POST\',
    data:sendData
} ).then( data => {
    console.log( data );
} );
   }


 return (



<div { ...useBlockProps() }>

    

<NumberControl
        isShiftStepEnabled={ true }
        onChange={ onPriceChange}
        step={0.01}
        shiftStep={ 0.01 }
        value= { attributes.price}
    />

    
</div>
 );

}
索引。php

add_action(\'rest_api_init\', function () {

    register_rest_route( \'wooberg/v2\', \'/product\', [
        \'method\'   => \'POST\',
        \'callback\' => \'wooberg_product_price_callback\',
        \'args\' => [
            \'product_id\' => [
                \'required\' => false,
                \'type\' => \'number,\'
            ],

            \'product_price\' => [
                \'required\' => false,
                \'type\' => \'number,\'
            ],
        ],
        \'permission_callback\' => function(){
            return current_user_can( \'edit_others_posts\' );
           
       } 
    ]  
);


 });


  function wooberg_product_price_callback($request){



$product_id = $request->get_param(\'product_id\');
$product_price = $request->get_param(\'product_price\');

$product_id = $request[\'product_id\'];
$product_price = $request[\'product_price\'];
if(! empty($product_id)){

    $product = wc_get_product($product_id);
    $curret_price = $product->get_price;
    $product->set_price($product_price);
    $product->set_regular_price($product_price);
    $product->save();


    $response = $product->get_name() .\'Has be update from \'. $curret_price .\' to \'.$product->get_price();
     return rest_ensure_response( $response,200 );
}else{
    $response = "No Id found";
    return new WP_REST_Response( [
        \'message\' => \'Product was not found\',
    ], 400 );
}
 
    
}

1 个回复
最合适的回答,由SO网友:Sally CJ 整理而成

你的apiFetch() usage 是正确的,但您得到的是;“未找到路线”;错误,因为\'method\' => \'POST\' 实际使用的部件methods 而不是method. (请注意,端点可以允许一个或多个HTTP方法s)

所以当method, 它没有使用,因此HTTP方法默认为仅获取。

你所需要做的就是使用\'methods\' => \'POST\' (或\'methods\' => \'GET,POST\' 如果您想同时允许GET和POST方法),那么错误就会消失。