Ok, je commence avec quelques AJAX trucs dans un thème wordpress
1) Je construis un thème enfant en dehors du cadre thématique 2) Mon thème enfant a un header.php, un index.php, un functions.php et un style.css (à ce stade)
Dans mon header.php, j'ai les éléments suivants (au fait, le code est adapté de http://codex.wordpress.org/AJAX_in_Plugins ):
<?php
if( !is_admin() ) {
add_action('wp_ajax_my_special_action', 'my_action_callback');
add_action('wp_ajax_nopriv_my_special_action', 'my_action_callback');
$_ajax = admin_url('admin-ajax.php');
}
?>
<script type="text/javascript" >
jQuery(document).ready(function($) {
var data = {
action: 'my_special_action',
whatever: 1234
};
jQuery.post('<?php echo($_ajax); ?>', data, function(response) {
jQuery('#output').html('Got this from the server: ' + response);
});
});
</script>
</head>
Bien, donc tout est cool - et il met à jour le div de la sortie OUTPUT sur la page avec "Got this from the server: 0"
J'ai besoin d'une fonction PHP appelée "my_action_callback" - donc, dans le functions.php de mon thème, j'ai les éléments suivants:
function my_action_callback() {
$whatever = $_POST['whatever'];
$whatever += 10;
echo 'whatever now equals: ' . $whatever;
die();
}
C’est la seule fonction dans mon functions.php
Pour être sûr que la fonction PHP fonctionne, je colle my_action_callback () dans mon index.php - et il affiche "tout ce qui est égal à: 10" comme prévu.
CEPENDANT - la réponse AJAX est toujours 'Compris par le serveur: 0' Ajax ne semble jamais recevoir la réponse de la fonction PHP.
J'ai essayé d'ajouter .ajaxError () pour voir s'il y avait des erreurs - Nope.
J'ai essayé d'ajouter les fonctions PHP à un autre plugin de mine - nope.
Qu'est-ce qui me manque si jQuery ne fait pas le bit ajax pour moi?
Merci d'avance
Placez également ces fonctions add_action
dans votre fichier functions.php
. S'ils sont dans header.php
, WordPress ne les enregistre jamais, car l'en-tête n'est pas chargé dans AJAX. De plus, vous n'avez pas besoin de cette vérification is_admin()
. L'en-tête du thème ne se chargera jamais dans admin. Donc, votre fichier de fonctions devrait ressembler à ceci:
add_action('wp_ajax_my_special_action', 'my_action_callback');
add_action('wp_ajax_nopriv_my_special_action', 'my_action_callback');
function my_action_callback() {
$whatever = $_POST['whatever'];
$whatever += 10;
echo 'whatever now equals: ' . $whatever;
die();
}
Et le début de cette partie du fichier d'en-tête de votre thème devrait ressembler à ceci:
<?php
$_ajax = admin_url('admin-ajax.php');
?>
<script type="text/javascript" >
jQuery(document).ready(function($) {
En dehors de cela, votre code a l'air d'aller pour le mieux!