Renvoyer des données JSON avec ajax dans wordpress
Ok, donc à une assez longue question ici. Je suis assez nouveau à l'AJAX et en particulier à utiliser dans le contexte de WordPress, mais j'ai suivi quelques tutoriels en ligne et je pense que j'y suis presque.
Je vais coller ce que j'ai à ce jour et d'expliquer ma pensée.
Ok donc, pour commencer, le JS.
jQuery(document).ready(function(){
jQuery('.gadgets-menu').mouseenter(function(){
doAjaxRequest();
});
});
De la souris entre .gadgets-menu et la demande déclenche, à l'aide de mouseenter de sorte qu'il se déclenche une seule fois.
La demande elle-même.
function doAjaxRequest(){
//here is where the request will happen
jQuery.ajax({
url: 'http://www.mysite.com/wp-admin/admin-ajax.php',
data:{
'action':'do_ajax',
'fn':'get_latest_posts',
'count':5
},
dataType: 'JSON',
success:function(data){
//Here is what I don't know what to do.
},
error: function(errorThrown){
alert('error');
console.log(errorThrown);
}
});
}
Maintenant la fonction php.
add_action('wp_ajax_nopriv_do_ajax', 'our_ajax_function');
add_action('wp_ajax_do_ajax', 'our_ajax_function');
function our_ajax_function(){
switch($_REQUEST['fn']){
case 'get_latest_posts':
$output = ajax_get_latest_posts($_REQUEST['count']);
break;
default:
$output = 'No function specified, check your jQuery.ajax() call';
break;
}
$output=json_encode($output);
if(is_array($output)){
print_r($output);
}
else{
echo $output;
}
die;
}
Et la ajax_get_latest_posts fonction
function ajax_get_latest_posts($count){
$posts = get_posts('numberposts='.'&category=20'.$count);
return $posts;
}
Donc, si j'ai bien fait de ce droit, la sortie doit être $posts = get_posts('numberposts='.'&category=20'.$count);
ie. le nombre de postes (5), de la catégorie 20.
Je ne sais pas quoi faire avec ça maintenant, comment puis-je obtenir le titre et la vignette?
Je suis désolé si c'est stupide, je suis à tâtonner autour d'ici.
Modifié php
add_action('wp_ajax_nopriv_do_ajax', 'our_ajax_function');
add_action('wp_ajax_do_ajax', 'our_ajax_function');
function our_ajax_function(){
$output = ajax_get_latest_posts($_REQUEST['count']); //or $_GET['count']
if($output) {
echo json_encode(array('success' => true, 'result' => $output));
}
else {
wp_send_json_error(); //{"success":false}
//Similar to, echo json_encode(array("success" => false));
//or you can use, something like -
//echo json_encode(array('success' => false, 'message' => 'Not found!'));
}
$output=json_encode($output);
if(is_array($output)){
print_r($output);
}
else{
echo $output;
}
die;
}
function ajax_get_latest_posts($count)
{
$args = array( 'numberposts' => $count, 'order' => 'DESC','category' => 20 );
$post = wp_get_recent_posts( $args );
if( count($post) ) {
return $post;
}
return false;
}
Cela ne fonctionne pas.
jQuery(document).ready(function(){
jQuery('.gadgets-menu').mouseenter(function(){
doAjaxRequest();
});
});
function doAjaxRequest(){
//here is where the request will happen
jQuery.ajax({
url: 'http://localhost:8888/wp-admin/admin-ajax.php',
data:{
'action':'do_ajax',
'fn':'get_latest_posts',
'count':5
},
dataType: 'JSON',
success:function(data){
if(data.success) {
alert("It works");
}
else {
//alert(data.message); //or whatever...
}
}
});
}
Pas d'alerte est affiché.
OriginalL'auteur andy | 2013-07-31
Vous devez vous connecter pour publier un commentaire.
Dans votre code
get_posts('numberposts='.'&category=20'.$count);
est mauvais, mais vous pouvez utiliser wp_get_recent_posts fonction de la place (bien qu'il utiliseget_posts
de toute façon), par exemplePuis dans votre
our_ajax-function
vous pouvez utiliserEn vous
success
fonction de rappel, vous pouvez ensuite vérifierVous pouvez lire ici sur
wp_send_json_error
fonction d'assistance pour en savoir plus sur les fonctions d'assistance.Mise à jour :
Rappelez-vous aussi que, après
$output=json_encode($output);
la$output
n'est pas un tableau plus, au lieu de cela, c'est unjson
chaîne, afinis_array($output)
sera de retour faux, mais si vous utilisezis_array()
juste avant de l'encoder à l'aide de$output=json_encode($output);
commeDans ce cas,
is_array( $output )
sera de retourtrue
.Un exemple de simulation.
Vous devez
loop
laresult
etappend
chaque ligne/certains champs de la page.Pardonnez-moi, le Cheikh, mais je ne sais pas comment le faire avec JS! C'était en fait ma question.
Si vous obtenez
posts
puisdata.results
(en fonction de ma réponse) contiendra tous les après dans un tableau deJavascript
objets et vous pouvez faire une boucle à l'aide de $.chaque (cochez cette réponse) ou ().Ouais je peut très bien le faire, le Cheikh, j'apprécie vraiment que vous essayer de bien, vous êtes un champion.
OriginalL'auteur The Alpha