簡體   English   中英

如何在wordpress中從ajax調用php函數?

[英]How can I call a php function from ajax in wordpress?

我是 wordpress 的新手,我需要從 ajax 調用一個 php 函數,但我的代碼不起作用。 我正在閱讀 wordpress 中的 ajax 標准,但我不知道會發生什么,我在這個博客中遵循了幾個教程和答案,他們都討論了將 javascript 文件排入隊列的操作,但問題仍然存在,我沒有不知道我做錯了什么。 為了繼續,我分享我的代碼。

這是我的 javascript 文件入隊功能:

function enqueue_script() {
    $ajax_script = 'popup';
    $uri = get_stylesheet_directory_uri() . '/assets/front/js/popup.js';
    wp_register_script($ajax_script, $uri);
    wp_localize_script( $ajax_script, 'ajax_object', array( 'ajax_url' => admin_url( 'admin-ajax.php' ) ) );
    wp_enqueue_script( $ajax_script, $uri, array('jquery'), rand(111,9999), 'all');
}
add_action( 'wp_enqueue_scripts', 'enqueue_script' );

我要調用的 php 函數,這是在 update_request_status.php 文件中:

function update_status(){
    echo "<script>alert('I am update function!!!!');</script>";
}

這是我的 js 操作,:

$('.btn-confirm').click(function(){
     var url_string = window.location.href;
     var url = new URL(url_string);
     var request_id = url.searchParams.get("request_id");
     $.ajax({
       url: ajax_object.ajaxurl,
       type: 'POST',
       cache: false,
       data: { "request_id": request_id } + '&action=change_status',
       success:function(data){
         alert("YEs I doing");
       },
       error:function(){
         alert("¡Error en el servidor, contancte al administrador!");
       }
     });
     window.location.href = "http://localhost:8081/megafrescos/pendientes";
     $('#msg-remove-request').css('display', 'none');
  });

最后,這是我的模態,帶有觸發操作以調用我的 php 函數的按鈕:

<div class="warning-msg" id="msg-remove-request">
  <button class="btn-close"  id="btn-close">&times;</button>
  <h5>¿Dar por concluida esta solicitud ? </h5><hr>
  <?php echo  fix_request()?>
  <div class="confirm-btns">
    <button class="btn-confirm">Aceptar</button>
    <button class="btn-close">Cancelar</button>
  </div>
  <div class='update-status'></div>
</div>

有人可以幫助我嗎?

有多種方法可以做到。 首先,我將展示您正在處理的那個。

您需要使用wp_ajax_{action}wp_ajax_nopriv_{action}定義兩個操作,其中{action}是關鍵字的占位符,用於標識需要調用的函數。 前者僅在用戶登錄時有效。后者用於未經身份驗證的用戶的請求。

兩個鈎子都應該引用您嘗試調用的同一個函數。

下面的示例返回已發送的 request_id 或帶有'Nothing'的字符串作為響應,只是為了測試一下。

add_action( 'wp_ajax_nopriv_update_status', 'update_status' ) ;
add_action( 'wp_ajax_update_status', 'update_status' );
function update_status() {
  $request_id = isset( $_POST[ 'request_id' ) ) ? 
    $_POST[ 'request_id' ) : 
    'Nothing';
  echo $request_id;
}

另一種更現代的方法是使用REST API 這使您能夠創建一個端點,在那里您可以對 URL 和清理進行更多控制。

您的端點看起來像這樣https://yourwebsite.com/wp-json/api/v1/update 您可以使用get_rest_url()獲取 REST 端點的靜態 URL,就像您使用admin_url( 'admin-ajax.php' )所做的一樣,並且應該將其添加到入隊文件中的wp_localize_script函數中。

端點檢查允許的方法並調用選項數組中指定的callback 從那里您可以訪問$request對象,其中包含來自您的請求的給定參數等信息。

然后返回一個響應以在前端讀取。

add_action( 'rest_api_init', 'register_update_endpoint' );
function register_update_endpoint() {

  // Register new route to get data from
  register_rest_route( 'api/v1', // Mandatory prefix with version
    '/update/', // Name of the route, can be anything.
    array(
      'methods'   => array( 'POST' ), // Allowed methods.
      'callback'  => 'update_status' // Function to call when URL is called.
    ) 
  );

  function update_status( WP_REST_Request $request ) {
    $request_id = $request->has_param( 'request_id' ) ?
      $request->get_param( 'request_id' ) :
      'Nothing';
    $response = new WP_REST_Response( $request_id; );
    return $request_id;
  }

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM