recherche

Maison  >  Questions et réponses  >  le corps du texte

Comment modifier dynamiquement le nombre de publications par page dans WordPress

<p>Je souhaite modifier le nombre de posts affichés sur certaines pages de mon site WordPress. </p> <p>J'ai trouvé l'extrait de code suivant ici : </p> <pre class="brush:php;toolbar:false;">$postsPage = $settings["postspage"]; query_posts('posts_per_page='.$postsPage);</pre> <p>Appeler avant <code>if (have_posts()) while (have_posts()) the_post()</code></p> <p>Je suis très nouveau sur PHP, mais ce que j'essaie, c'est ceci</p> <pre class="brush:php;toolbar:false;">... si ( is_front_page()) { $postsPage = $settings["postspage"] + 1 ; }elseif ( is_tag()) { $postsPage = $settings["postspage"] - 2; } autre { $postsPage = $settings["postspage"]; } query_posts('posts_per_page='.$postsPage); ...</pré> <p>Mais malheureusement, cela ne fonctionne pas. Au lieu de cela, il ne renvoie qu'une seule publication de la page d'accueil au lieu des 5 publications + 1 définies dans le menu WP. Je peux coder en dur la valeur souhaitée comme $postPage = 6; </code> pour is_front_page et cela fonctionne bien. Pour une raison quelconque, je ne peux rien ajouter/soustraire de la valeur donnée par <code>$settings["postspage"]</code>. Cela fonctionne également si je ne change pas la valeur (clause else). Qu'est-ce que j'ai raté? </p> <p>J'ai essayé de convertir la valeur de <code>$settings["postspage"]</code> en un entier car je pensais qu'elle pourrait être renvoyée sous forme de chaîne. J'utilise : <code>$postsPage = (int)$settings["postspage"] + 1;</code> ou <code>$postsPage = intval($settings["postspage"]) + 1;< ;/code>Mais sans succès. Comme je ne connais pas très bien les fonctions wordpress et leurs variables, je cherchais la raison pour laquelle je ne peux pas modifier le nombre de posts. J'apprécierais tous les conseils! </p>
P粉256487077P粉256487077438 Il y a quelques jours416

répondre à tous(1)je répondrai

  • P粉153503989

    P粉1535039892023-09-03 00:44:13

    On ne sait pas où vous mettez ce code et comment le trouver $settings, mais cela devrait fonctionner.

    add_action( 'pre_get_posts', 'alter_number_of_posts' );
    
    function alter_number_of_posts( $query ) {
    
        if ( !$query->is_main_query() ){
            return;
        }
    
        $posts_per_page = get_option( 'posts_per_page' );
    
        if ( is_front_page() ) {
            $query->set( 'posts_per_page', $posts_per_page + 1 );
            return;
        }
        if ( is_tag() ) {
            $query->set( 'posts_per_page', $posts_per_page - 2 );
            return;
        }
    }

    $query 通过引用传递,因此您对其所做的任何更改都将反映在全局查询对象中。您不需要返回它,这意味着您可以安全地从每个条件内的函数返回,而不是使用 elseif.

    répondre
    0
  • Annulerrépondre