web-dev-qa-db-fra.com

Ajax charger plus de messages - Les paramètres WP_Query ne fonctionnent pas

J'essaie de remplacer la pagination standard WP par un bouton Ajax load more posts. En gros, je suis le code de cette question qui, pour la plupart, fonctionne bien.

Voici le code pertinent:

HTML (page d'index du blog):

<div id="content">

<?php $args = array(
    'posts_per_page' => 5
);

if (isset($_GET['views'])) {
  $args['orderby'] = 'meta_value_num';
  $args['meta_key'] = 'post_views_count';
  $args['order'] = 'DESC';
};

$wp_query = new WP_Query($args); ?>

<?php while( $wp_query->have_posts() ): $wp_query->the_post();  ?>
    <?php the_title(); ?>
<?php endwhile; ?>  

<a id="more_posts">Load More</a>

<?php wp_reset_postdata(); ?>

</div>

JS (au bas de la page d'index du blog):

var ajaxUrl = "<?php echo admin_url('admin-ajax.php', null); ?>";
var page = 1; // What page we are on.
var ppp = 4; // Post per page

jQuery("#more_posts").on("click",function(){ // When btn is pressed.
    jQuery("#more_posts").attr("disabled",true); // Disable the button, temp.
    jQuery.post(ajaxUrl, {
        action:"more_post_ajax",
        offset: (page * ppp) + 1,
        ppp: ppp
    }).success(function(posts){
        page++;
        jQuery("#content").append(posts);
        jQuery("#more_posts").attr("disabled",false);
    });

   });

PHP (dans functions.php):

function more_post_ajax(){

$offset = $_POST["offset"];
$ppp = $_POST["ppp"];
header("Content-Type: text/html");

$args2 = array(
    'posts_per_page' => $ppp,
    'offset' => $offset,
    'orderby' => 'Rand'
);

$custom2 = new WP_Query($args2);

while ($custom2->have_posts()) : $custom2->the_post(); 
   the_title();
endwhile;

exit;
}

add_action('wp_ajax_nopriv_more_post_ajax', 'more_post_ajax'); 
add_action('wp_ajax_more_post_ajax', 'more_post_ajax');

Ce que je dois faire, c'est modifier les paramètres de la requête utilisée pour charger les publications en fonction du choix ou non de "vues" dans l'ordre, comme cela fonctionne dans le code du fichier de modèle.

Tout fonctionne comme il se doit, sauf que les arguments ajoutés à la requête dans functions.php ne fonctionnent pas correctement. Par exemple, si je remplace posts_per_page de la variable $ppp par un nombre dans functions.php, cela fonctionnera correctement. Cependant, 'orderby' => 'Rand' (utilisé uniquement à des fins de test) ne fait rien, les publications sont toujours chargées par date. Tout autre paramètre orderby ou autre que j'ai essayé ne fonctionne pas. Si je retire la requête de la fonction et que je l'ajoute directement au fichier de modèle, cela fonctionne bien.

Pourquoi la requête dans functions.php ne reconnaît-elle pas de paramètres supplémentaires? Pourquoi changer posts_per_page ou offset fonctionne-t-il correctement alors que d'autres paramètres ne le font pas?

1
Josh Warren

Pour une raison quelconque, il s'agissait d'un problème spécifique au paramètre orderby. L'ajout de remove_all_filters('posts_orderby'); en haut de la fonction more_post_ajax() a résolu le problème.

1
Josh Warren