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é.

avez-vous vérifié le réseau de l'onglet sur Chrome Dev Tools pour vérifier l'état de la réponse et le texte? aussi êtes-vous sûr que l'url de l'appel ajax est-il correct? n'êtes-vous pas manque le nom de votre dossier/site ou travaillez-vous sur la racine de htdocs sur votre localhost?

OriginalL'auteur andy | 2013-07-31