ここの指示に従ってください http://codex.wordpress.org/AJAX_in_Plugins#Ajax_on_the_Administration_Side
私はこのコードを書きました:
DIE()を含む編集、まだ動作しない
function my_button() {
echo
"<script type = 'text/javascript'>
function ajaxRequest(){
jQuery(document).ready(function(jQuery) {
var sendData = {};
sendData['action'] = 'my_action';
sendData['external_id'] = '$postID';
sendData['title'] = '$post_title';
sendData['content'] = '$post_content';
jQuery.ajax({
type: 'POST',
url: 'http://lvh.me:3000/s/wp',
xhrFields: {
withCredentials: true
},
headers: {'X-Requested-With': 'XMLHttpRequest'},
data: sendData,
error: function(jqXHR){
console.log(jqXHR.responseText);
},
success: function(data){
window.open(data['link']);
}
});
})
};
</script>
<input type='button' onclick='ajaxRequest()' value='Send' />";
}
add_action( 'dbx_post_sidebar', my_button);
add_action('wp_ajax_my_action', my_action_callback);
function my_action_callback() {
global $wpdb; // this is how you get access to the database
$api_key = $_POST['api_key'];
$user = wp_get_current_user();
$user_id = $user->ID;
add_user_meta($user_id, 'my_api_key', $api_key);
die();
}
私はそれが大量のコードであることを知っています、しかし私はただエラーがどこにあるのか理解することができません。
トンありがとう。
あなたのURLはadmin-ajax.phpを指しているはずです。
echo admin_url('admin-ajax.php');
EDIT:私はあなたの方法にいくつかの問題を見つけました。
これはあなたの場合のためにどうするべきかということです、私は先に行き、そしていくつかのことを書き直しました。
function my_button() {
echo
"<script type = 'text/javascript'>
jQuery( document ).ready( function() {
jQuery('input.sendajax').click( function() {
var sendData = {
action: 'my_action',
external_id = $postID,
title: '$post_title',
content: '$post_content'
};
jQuery.post( ajaxurl, sendData, function( response ) {
// You need to send some type of validation back
// Like a 'success' variable either true or false
// Stuff sent back is accessed through the 'response' variable, so to get the item sent back called 'success', you would use 'response.success'
if( response.success == true ) {
window.open(response.link);
} else {
console.log(response);
}
});
});
})
</script>
<input class='sendajax' type='button' onclick='ajaxRequest()' value='Send' />";
}
add_action( 'admin_head', 'my_button');
add_action('wp_ajax_my_action', 'my_action_callback');
function my_action_callback() {
global $wpdb; // this is how you get access to the database
$api_key = $_POST['api_key'];
$user = wp_get_current_user();
$user_id = $user->ID;
add_user_meta($user_id, 'my_api_key', $api_key);
$response = array( 'success' => true, 'link' => 'this is a response var' ); // Stuff to send back to AJAX
echo json_encode( $response );
die(); // Needs this
}
コーデックスを注意深く読み、自分のコードを code here と比較すると、それらは非常に異なります。あなたは最も適切だと思う方法を使用しようとしていましたが、WPはすでにあなたのためにこれらのことをすることができます(数日前まで気付かなかったので、気分を悪くしないでください!)
私がしたのは、WPのネイティブなajaxurl
メソッドとjQuery.post
メソッドを使ってadmin-ajax.php
を呼び出し、それらの変数を使って何らかの処理を行う関数にsendData
情報を送ってからresponse
をエコーバックすることです。
あなたがしていることを2つの部分に分けなければならないようです。
1 /外部APIをクエリしてから、APIキーを返します
2/APIキーをユーザーに関連付けます。
そこで、最初に標準のajax呼び出しでAPIを照会し、次にその最初のajax呼び出しの成功ハンドラーで、内部のwp admin-ajax呼び出しを実行してユーザーをAPIキーに関連付けます。