Saltare i primi 3 articoli nella query wp

18 set 2015, 17:55:01
Visualizzazioni: 28.1K
Voti: 5

Ecco la query che ho utilizzato.

 <?php $paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
 $wp_query = new WP_Query('order=asc&orderby=meta_value&meta_key=date&posts_per_page=6&paged=' . $paged); ?>

C'è un modo per saltare i primi 3 articoli solo nella prima pagina (?paged=1) e non nelle altre pagine (?paged=2....).

0
Tutte le risposte alla domanda 4
1

Per saltare i post utilizza semplicemente il parametro offset in wp_query.

Per visualizzare gli ultimi tre post:

<?php
$latestpost = new WP_Query('order=asc&orderby=meta_value&meta_key=date&posts_per_page=3');

//Aggiungi qui il loop per visualizzare i post come

while($latestpost->have_posts()) : $latestpost->the_post();

the_title();

the_content();

endwhile; wp_reset_query();

//Dopo salta tre post usando offset

 $latestpost = new WP_Query('order=asc&orderby=meta_value&meta_key=date&posts_per_page=6&offset=3&paged=' . $paged); 

the_title();

the_content();

endwhile; wp_reset_query();

?>

Ecco fatto

18 set 2015 18:33:27
Commenti

ma questo scombina la paginazione, cioè la paginazione non funziona... comunque grazie per la risposta

Megh Gandhi Megh Gandhi
18 set 2015 19:48:47
0

http://www.smashingmagazine.com/2009/06/10-useful-wordpress-loop-hacks/#2-use-more-than-one-loop-on-a-page-without-printing-duplicate-posts

Ho semplicemente seguito questo metodo e apportato alcune modifiche...

// in functions.php
$mega = new WP_Query('order=asc&orderby=meta_value&meta_key=date&posts_per_page=3');
//imposta i post per pagina a 3 così verranno mostrati gli ID dei primi 3 post 
$ids = array();
while ($mega->have_posts()) : $mega->the_post();
$ids[] = get_the_ID();

endwhile;

Dopodiché ho modificato leggermente il loop principale per saltare i primi tre post del loop.

   $args= array(
'post_type' => 'post',
'posts_per_page' => 6,
'paged' => $paged,
'order'=> 'asc',
'orderby'=> 'meta_value',
'meta_key'=>'date',
'post__not_in' => $ids

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

E funziona esattamente come volevo..

18 set 2015 22:46:38
5

Utilizzando il parametro offset: https://codex.wordpress.org/Class_Reference/WP_Query#Pagination_Parameters

$wp_query = new WP_Query('order=asc&orderby=meta_value&meta_key=date&posts_per_page=6&offset=3&paged=' . $paged); ?>
18 set 2015 17:59:17
Commenti

scombussola la paginazione.. ?paged=2 mostra gli stessi post

Megh Gandhi Megh Gandhi
18 set 2015 18:12:27

@MeghGandhi capisci che il fatto che la paginazione non funzioni non ha niente a che fare con l'impostazione del parametro offset. La tua query ha già scombussolato la paginazione.

Robert hue Robert hue
18 set 2015 20:45:54

in realtà WordPress genera un proprio offset che fa funzionare la paginazione e quando impostiamo manualmente i parametri si rompe la paginazione.. http://codex.wordpress.org/Making_Custom_Queries_using_Offset_and_Pagination

Megh Gandhi Megh Gandhi
18 set 2015 21:01:43

Darei un'altra occhiata alla paginazione.. a volte può essere complicato implementarla correttamente. Prova la query senza le proprietà posts_per_page e paged e verifica se la paginazione funziona correttamente basandosi sulle impostazioni predefinite di WordPress (Impostazioni > Lettura).

deflime deflime
18 set 2015 21:23:34

http://www.smashingmagazine.com/2009/06/10-useful-wordpress-loop-hacks/#2-use-more-than-one-loop-on-a-page-without-printing-duplicate-posts beh ho usato questo metodo e ho aggiunto il codice alle funzioni e funziona evviva!

Megh Gandhi Megh Gandhi
18 set 2015 22:35:58
0

Invece di usare l'attributo offset hai pensato di creare una variabile con valore 1 che viene incrementata nel ciclo. Se il ciclo è minore di 4 non fare nulla, altrimenti

<?php
    $p = 1;
    while ( have_posts() ) : the_post();
        if($p > 3) {
?>
// FAI QUALCOSA

Questo non risolve il problema, ma potresti impostare una condizione che se è la prima pagina allora salti i primi 3?

28 ott 2016 19:58:02