Seu URL deve estar apontando para admin-ajax.php
echo admin_url('admin-ajax.php');
Siga as instruções aqui enlace
Eu escrevi este código:
EDITADO PARA INCLUIR MORRER (), AINDA NÃO TRABALHA
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();
}
Eu sei que é uma tonelada de código, mas não consigo descobrir onde está o erro.
Obrigado uma tonelada.
Seu URL deve estar apontando para admin-ajax.php
echo admin_url('admin-ajax.php');
EDIT : Encontrei vários problemas com o seu método.
É assim que deve ser feito para o seu caso, eu fui em frente e reescrevi algumas coisas.
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
}
Se você ler o Codex cuidadosamente e comparar seu código com o código , eles serão muito diferentes. Você estava tentando usar um método que seria mais apropriado, mas o WP já pode fazer essas coisas por você (o que eu nem percebi até alguns dias atrás, então não se sinta mal!)
O que fiz foi usar o método ajaxurl
e jQuery.post
nativo do WP para chamar admin-ajax.php
e enviar as informações de sendData
para uma função que fará algumas coisas com essas variáveis e, em seguida, retornar um response
então você pode fazer algo com isso também.
Parece que você precisa dividir o que você está fazendo em duas partes.
1 / Consulte sua API externa e retorne sua chave de API
2 / Associe a chave da API a um usuário.
Portanto, primeiro eu consultaria sua API por meio de uma chamada ajax padrão e, no manipulador de sucesso dessa primeira chamada ajax, executaria sua chamada wp admin-ajax interna para associar o usuário à chave da API.