iT邦幫忙

0

各位日安

我為了將自己的套件加入了在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來使用,一顆心無處安放呀,請問有大大能給我一條明路嗎?

1 個回答

1
海綿寶寶
iT邦超人 1 級 ‧ 2019-09-29 22:41:49
最佳解答

根據網友說法
你可以先看看
http://yourweb/wp-json

http://yourweb/index.php/wp-json
先確定看看
你加的 API 有沒有加成功

看更多先前的回應...收起先前的回應...
Rach iT邦新手 5 級 ‧ 2019-09-29 22:51:24 檢舉

wtf,我run了一下wp-json,查到裡面有code,然後就可以執行了,這是什麼巫術....我的六個鐘頭跟我的青春一樣消失了ˊ_>ˋ

Rach iT邦新手 5 級 ‧ 2019-09-29 23:02:58 檢舉

我真是太愚蠢的發現問題了...我的action code為了測試寫死的結果是正式機的網址LOL

Rach iT邦新手 5 級 ‧ 2019-09-29 23:02:59 檢舉

我真是太愚蠢的發現問題了...我的action code為了測試寫死的結果是正式機的網址LOL

問題解決就好
記得選我最佳解答

我要發表回答

立即登入回答