Cette fonction AJAX est appelée en un clic:
$.ajax({
url: 'site/ajax.php',
data: {id: $('section#single article input:last-of-type').attr('value'), cote: 'like'}
}).done(function(html) {}
Il transmet l'ID de la publication (contenue dans une entrée masquée) pour la fonction get_post_meta () située dans le fichier ajax.php. Voici à quoi ressemble AJAX.php:
$cote = get_post_meta($_GET['id'], 'cote', true);
if($_GET['cote'] == 'like') {
$newCote = $cote++;
update_post_meta($_GET['id'], 'cote', $newCote);
} else {
$newCote = $cote--;
update_post_meta($_GET['id'], 'cote', $newCote);
}
Il est supposé mettre à jour le champ "cote" de la publication personnalisée, mais le problème est que la fonction get_post_meta () n'est pas définie dans ajax.php. C'est le message d'erreur:
Fatal error: Call to undefined function get_post_meta() in /home2/electro/public_html/beta... on line 2
Si vous chargez un fichier directement, aucune des fonctions WordPress ne fonctionnera. C'est pourquoi vous devriez presque toujours utiliser l'API AJAX. L'API AJAX _ résout ce problème. Tout se charge dans le contexte WordPress.
Vous voudriez envelopper votre traitement PHP est une fonction:
function my_ajax_cb_wpse_108143() {
$cote = get_post_meta($_POST['id'], 'cote', true);
if($_POST['cote'] == 'like') {
$newCote = $cote++;
update_post_meta($_POST['id'], 'cote', $newCote);
} else {
$newCote = $cote--;
update_post_meta($_POST['id'], 'cote', $newCote);
}
}
Accrochez-le au système AJAX:
add_action('wp_ajax_my_update_pm', 'my_ajax_cb_wpse_108143');
add_action('wp_ajax_nopriv_my_update_pm', 'my_ajax_cb_wpse_108143');
Soumettez votre demande à http://site/wp-admin/admin-ajax.php
et transmettez my_update_pm
en tant qu'argument lorsque le Javascript effectue une demande.
var data = {
action: 'my_update_pm',
id: jQuery('section#single article input:last-of-type').attr('value'),
cote: 'like'
};
jQuery.post(ajax_url, data, function(response) {
// whatever you need to do; maybe nothing
});
Vous pouvez définir ajax_url
de la même manière que cela depuis le Codex:
add_action( 'admin_enqueue_scripts', 'my_enqueue' );
function my_enqueue($hook) {
if( 'index.php' != $hook ) return; // Only applies to dashboard panel
wp_enqueue_script( 'ajax-script', plugins_url( '/js/my_query.js', __FILE__ ), array('jquery'));
// in javascript, object properties are accessed as ajax_object.ajax_url, ajax_object.we_value
wp_localize_script( 'ajax-script', 'ajax_object',
array( 'ajax_url' => admin_url( 'admin-ajax.php' ), 'we_value' => $email_nonce ) );
}