我只是想学习如何与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 );
}
}
最合适的回答,由SO网友:Sally CJ 整理而成
你的apiFetch()
usage 是正确的,但您得到的是;“未找到路线”;错误,因为\'method\' => \'POST\'
实际使用的部件methods
而不是method
. (请注意,端点可以允许一个或多个HTTP方法s)
所以当method
, 它没有使用,因此HTTP方法默认为仅获取。
你所需要做的就是使用\'methods\' => \'POST\'
(或\'methods\' => \'GET,POST\'
如果您想同时允许GET和POST方法),那么错误就会消失。