各位日安
我為了將自己的套件加入了在dashboard中,增加了一個woocommerce旁邊的post-box
,裡頭有一個可以作動的按鈕,但是為了回傳一段程式碼,我本當初選擇了wp-admin的wp-ajax
來做回傳。
不過我連跑官方網站的sample code都有問題,以下是程式碼的片段:
add_action( 'wp_ajax_my_action', 'my_action' );
function my_action() {
global $wpdb; // this is how you get access to the database
header("Content-Type: text/html");
$whatever = intval( $_GET['whatever'] );
$whatever += 10;
echo '<div>'.$whatever.'</div>';
wp_die(); // this is required to terminate immediately and return a proper response
}
我是以GET的方式去請求,所以也直接去輸入url去拿,不過一切的悲劇從這裡開始,我得到了整整嘗試三個鐘頭,將近四百次的400 bad request,沒有成功一次,這們一個單純把變數印出來的ajax回傳,他怎麼樣都不願意輸出,當然我有試過加進headers
為html,但仍然是徒勞無功,所以我換了另外一個,wordpress提供的restapi。
倒是呢,這又是另一個更大的問題了,我使用他們的endpoints來製作,我更是得到了我根本沒有這一個route的回傳,這讓我更茫然了,因為我的同個檔案中所加進去的action都是有運作的,就偏偏那幾行沒有運作,各位看官先來看看也是官網的sample code.
add_action( 'rest_api_init', function () {
register_rest_route( 'myplugin/v1', '/author/(?P<id>\d+)', array(
'methods' => 'GET',
'callback' => 'my_awesome_func',
) );
} );
function my_awesome_func( $data ) {
$posts = get_posts( array(
'author' => $data['id'],
) );
if ( empty( $posts ) ) {
return null;
}
return $posts[0]->post_title;
}
我就是撈個author,就算沒有也要來個0或null,但是很新的它給了我一個這段訊息:
{"code":"rest_no_route","message":"No route was found matching the URL and request method","data":{"status":404}}
心都碎了,我將程式碼拿去functions.php反而導致整個網站掛掉,幸好測試機是不怕死的,但是wordpress這開發讓我沒有辦法接上自己開發的api來使用,一顆心無處安放呀,請問有大大能給我一條明路嗎?
根據網友說法
你可以先看看
http://yourweb/wp-json
或
http://yourweb/index.php/wp-json
先確定看看
你加的 API 有沒有加成功