web-dev-qa-db-fra.com

Utilisation de ajax avec la pagination et une sous-requête personnalisée

J'ai une page qui utilise trois requêtes pour récupérer une variété de contenu. Une de ces requêtes saisit des publications en rapport avec le sujet de la page. Étant donné que ces publications peuvent être de toutes sortes et reliées par diverses méthodes (valeurs définies par différents champs magiques, leur catégorie, etc.), je me sers d'une requête personnalisée pour les récupérer (quelque chose pour lequel je construis des arguments et les passe à WP_Query ( ) comme suit: $collected_child_posts = new WP_Query($args);

Actuellement, je retourne 5 résultats à la fois (dans mes arguments, j'ai 'posts_per_page' => 5) et je souhaite les rechercher en utilisant ajax afin que seul ce bloc de résultats soit mis à jour lorsque vous cliquez sur un lien MORE POSTS.

J'ai implémenté cela en ajoutant une URL au bouton MORE POSTS qui ressemble à ?paged=n, puis en la récupérant via ajax. Le problème est que je récupère la page entière (y compris les publications souhaitées) lorsque je ne souhaite que les publications elles-mêmes.

Des idées sur la meilleure façon de récupérer uniquement les publications de la sous-requête sans renvoyer la page entière?

Merci!

1
gaoshan88

Deux options-

charger un fragment de page en utilisant la méthode de chargement de de jQuery (voir Chargement de fragments de page),

ou créez votre propre fonction ajax pour charger les publications et les renvoyer dans le balisage de votre choix:

add_action('wp_ajax_my_ajax_get_posts', 'my_ajax_callback');
add_action('wp_ajax_nopriv_my_ajax_get_posts', 'my_ajax_callback');
function my_ajax_callback() {
    $args = $_POST['myargs'];
    $collected_child_posts = new WP_Query($args);
    echo 'some stuff';
    die();
}

transmettez l'URL admin-ajax à votre javascript via wp_localize_script , ou insérez-le directement dans votre modèle via admin_url('admin-ajax.php');

puis appelez admin-ajax.php et transmettez votre action ajax:

jQuery(document).ready(function($){
    $.post(your_ajaxurl, {
        action: 'my_ajax_get_posts',
        myargs: args
    },
    function(data) {
        alert(data);
    });
});

la première méthode est évidemment plus simple, mais la seconde est plus facile sur le serveur car beaucoup moins de WP sont chargés d'exécuter un appel ajax de cette façon, plus moins de données sont envoyées.

1
Milo