Mostra un diverso numero di messaggi per pagina a seconda del contesto (ad esempio, home page, ricerca, archivio)

wordpress.stackexchange https://wordpress.stackexchange.com/questions/21

  •  16-10-2019
  •  | 
  •  

Domanda

In Impostazioni di lettura, non c'è posto per impostare il numero di posti dimostrato che influisce sul numero dei posti indicati in tutti i contesti. Mi piacerebbe mostrare invece un certo numero di posti sulla homepage, e un diverso numero di messaggi su pagine come archivio, risultati di ricerca, ecc

lettura-settings-blog-pagine-show-a-più-per-page

mi rendo conto che potrei farlo modificando i file del tema e la modifica dei parametri di query lì, ma preferirei avere un più facile accesso alla pagina un semplice impostazioni. Molto tempo fa, mi sono imbattuto in un plugin che ha fatto questo, ma non riesco a trovare ora.

Qualcuno sa di un plugin per fare questo, o anche una funzione che ho potuto mettere in functions.php per realizzare la stessa cosa?

È stato utile?

Soluzione

Credo che il modo migliore per farlo in un plugin è quello di eseguire il seguente funzione di esempio quando si incontra il gancio azione pre_get_posts. L'oggetto $wp_query è disponibile, il che significa i tag condizionali sono disponibili, ma prima di WordPress ottiene i messaggi, il che significa che si sta cambiando interrogazione vars prima della prima query in esecuzione, piuttosto che aggiungere una seconda query come quando query_posts () viene utilizzato in un file del tema.

function custom_posts_per_page($query) {
    if (is_home()) {
        $query->set('posts_per_page', 8);
    }
    if (is_search()) {
        $query->set('posts_per_page', -1);
    }
    if (is_archive()) {
        $query->set('posts_per_page', 25);
    } //endif
} //function

//this adds the function above to the 'pre_get_posts' action     
add_action('pre_get_posts', 'custom_posts_per_page');

Altri suggerimenti

si potrebbe fare un ciclo personalizzato utilizzando query_posts, e specificare il numero di messaggi di is_home, is_archive, ecc.

solo una semplice istruzione if con query_posts

Per aggiungere a questa domanda. C'è qualcuno che sapere come determinare post_per_page per questa funzione la funzione custom_posts_per_page ($ query) se aggiungere la nuova pagina index.php in questo modo:

<?php
if ($_GET['new'] == 1) 
{
    include ( TEMPLATEPATH . '/newpage.php' );
    exit;
}
?>

Mi rendo conto che avrei potuto fare questo modificando i file del tema e la modifica dei parametri di query lì, ma preferirei avere un più facile accesso a una semplice pagina delle impostazioni.

Per motivi di completezza, ho scoperto che query_posts combinato con la concatenazione $query_string funziona bene.

Ho messo questo codice in index.php (il mio tema non ha category.php) ...

<?php 
if (!is_front_page()) { 
    query_posts($query_string . "&posts_per_page=20"); 
}
?>

Naturalmente quello che stiamo facendo qui sta modificando la stringa di query interna del ciclo, sovrascrivendo il numero predefinito di messaggi per pagina .

E funziona a meraviglia per la fornitura di un elenco più piccolo dei messaggi su home page dove sto Mostra i messaggi completi e un elenco molto più grande di tutti i messaggi in qualsiasi altro luogo (categorie, in base alla data, ecc), dove sto mostrando solo riassunti Post.

Tuttavia, si prega di fare notare che a differenza della risposta accettata, questo verrà eseguito la query due volte , quindi non è bello come un soluzione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a wordpress.stackexchange
scroll top