web-dev-qa-db-fra.com

Impossible de publier posts_per_page par variable

Je charge une liste de produits sur une page de type archive et crée une requête personnalisée à cet effet. Je souhaite créer une fonctionnalité "charger plus" afin que cliquer sur le bouton "charger plus" en bas de la liste charge les 10 produits suivants.

Je pensais que ce serait aussi simple que d’utiliser une variable pour définir 'posts_per_page' et l’incrémenter simplement de 10 lorsque le bouton est cliqué. J'ai des résultats étranges cependant. Ce code n'est pas le code final mais juste pour illustrer ce problème.

if(isset( $_POST['load-next-amount'] )){
     $pageamount = 10
}
 else {
     $pageamount = 5;   
 }

Donc, la première fois que cela est chargé, il devient faux car le bouton n'a pas encore été cliqué, donc posts_per_page sera défini sur 5. Ensuite, si vous cliquez sur le bouton, vous vous attendez à ce que 10 soit chargé, mais il continue à se charger 5 Si toutefois je change le code en ceci:

if(isset( $_POST['load-next-amount'] )){
     $pageamount = 4
}
 else {
     $pageamount = 5;   
 }

il va charger 4. Donc, je ne peux pas augmenter le nombre de posts_per_page avec cette variable, mais je peux le diminuer. Étrange.

Voici ma requête:

$myArgs = array(
        'category'         => '',
        'category_name'    => '',
        'orderby'          => 'meta_value_num',
        'order'            => 'ASC',
        'include'          => '',
        'exclude'          => '',
        'meta_key'         => '_price_per_1hr_lesson',
        'meta_value'       => '',
        'post_type'        => 'job_listing',
        'post_mime_type'   => '',
        'post_parent'      => '',
        'post__in' => $what,
        'author'       => '',
        'author_name'      => '',
        'post_status'      => 'publish',
        'job_listing_region'  => "'" . $city . "'",
        'post_status'      => 'publish',
        'posts_per_page' => $pageamount,
        'suppress_filters' => true 
    );
    $myquery = new WP_Query( $myArgs );

UPDATE: using print_r Je peux voir que la valeur correcte est affectée à la variable et que cette valeur est correctement affectée à 'posts_per_page'. Pour une raison quelconque, il l'ignore, SAUF qu'il soit inférieur à la valeur précédemment attribuée. Par exemple, si je règle l'instruction else sur $ pageamount = 20, lors du premier chargement de la page, il y en aura 20, puis si je clique sur le bouton (envoi de la variable au script qui est 10), il en chargera 10. un nombre quelconque de messages, je code dur tant qu'il est inférieur à 20.

De toute évidence, il y a quelque chose dans WP qui définit une valeur par défaut ou quelque chose d'autre. Encore un peu de newb à WP donc je ne sais pas. En regardant wp_config et je ne vois rien.

2
Duck of Death

D'accord, je pense que je vois ce qui se passe ...

Selon les paramètres de pagination de WP la documentation, posts_per_page est effectivement mis en cache. Un peu ... En gros, vous pouvez définir la valeur "10" la première fois, comme vous le faites, puis la valeur 5 après, mais utilisez ensuite les paramètres "offset" ou "paginé" pour obtenir les publications que vous souhaitez.

Votre variable "load-next-amount" serait simplement un compteur auquel "offset" ou "page" vous voulez accéder ...

En utilisant offset, vous pourriez passer "load-next-amount" égal à "0", "1", "2", ...

$myArgs = array(
    'category'         => '',
    'category_name'    => '',
    'orderby'          => 'meta_value_num',
    'order'            => 'ASC',
    'include'          => '',
    'exclude'          => '',
    'meta_key'         => '_price_per_1hr_lesson',
    'meta_value'       => '',
    'post_type'        => 'job_listing',
    'post_mime_type'   => '',
    'post_parent'      => '',
    'post__in' => $what,
    'author'       => '',
    'author_name'      => '',
    'post_status'      => 'publish',
    'job_listing_region'  => "'" . $city . "'",
    'post_status'      => 'publish',
    'posts_per_page' => 10, // <--------
    'offset' => 10 + (intVal($_POST['load-next-amount']) * 5), // <--------
    'suppress_filters' => true 
);
$myquery = new WP_Query( $myArgs );

J'espère que cela t'aides!

0
MacPrawn

Vous attribuez la valeur à chaque fois, vous devez faire une somme, la valeur précédente et le nouveau 5 également si la page est rafraîchie (je ne suis pas sûr si vous utilisez ajax), vous devez conserver cette valeur, comme ceci:

if(isset( $_POST['load-next-amount'] )){
     //the previous value plus 5
     $previous_value = $_POST['load-next-amount'];
     $pageamount = $previous_value + 5; 
}
 else {
     $pageamount = 5;   
 }

dans l'URL du bouton, vous devez mettre la var, quelque chose comme ceci:

<a href="?load-next-amount=<?php echo $pageamount; ?>"> Load More </a>
0
David Lee