Aggiornare i meta dei custom post con AJAX
Questa funzione AJAX viene chiamata al click:
$.ajax({
url: 'site/ajax.php',
data: {id: $('section#single article input:last-of-type').attr('value'), cote: 'like'}
}).done(function(html) {}
Passa l'ID del post (contenuto in un input nascosto) alla funzione get_post_meta() che si trova in ajax.php. Ecco come appare 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);
}
Dovrebbe aggiornare il campo "cote" del custom post, ma il problema è che la funzione get_post_meta() non è definita in ajax.php. Questo è il messaggio di errore:
Fatal error: Call to undefined function get_post_meta() in /home2/electro/public_html/beta... on line 2

Se carichi un file direttamente, nessuna delle funzioni di WordPress funzionerà. Ecco perché dovresti quasi sempre utilizzare l'API AJAX. L'API AJAX risolve questo problema. Tutto viene caricato nel contesto di WordPress.
Dovresti racchiudere il tuo codice PHP di elaborazione in una funzione:
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);
}
}
Collega questa funzione al sistema 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');
Invia la tua richiesta a http://site/wp-admin/admin-ajax.php
e passa my_update_pm
come argomento quando Javascript effettua una richiesta.
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) {
// fai quello che ti serve; forse niente
});
Puoi impostare ajax_url
in modo simile a questo esempio dal Codex:
add_action( 'admin_enqueue_scripts', 'my_enqueue' );
function my_enqueue($hook) {
if( 'index.php' != $hook ) return; // Si applica solo al pannello di dashboard
wp_enqueue_script( 'ajax-script', plugins_url( '/js/my_query.js', __FILE__ ), array('jquery'));
// in javascript, le proprietà degli oggetti sono accessibili come 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 ) );
}

Grazie! Puoi spiegarmi questo per favore: Invia la tua richiesta a http://site/wp-admin/admin-ajax.php e passa my_update_pm come argomento quando Javascript effettua una richiesta. -- Cos'è admin-ajax.php?

admin-ajax.php
è un file utilizzato dal sistema AJAX del WordPress Core. Tutte le richieste API AJAX dovrebbero essere inviate a quell'indirizzo.
