[英]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">×</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.