Omiterea primelor 3 articole în wp query

18 sept. 2015, 17:55:01
Vizualizări: 28.1K
Voturi: 5

Iată interogarea pe care am folosit-o.

 <?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); ?>

Există vreo modalitate de a omite primele 3 articole doar pe prima pagină (?paged=1) și nu pe celelalte pagini (?paged=2....).

0
Toate răspunsurile la întrebare 4
1

Pentru a sări peste postări, folosește parametrul offset în wp_query.

Pentru a afișa cele mai recente trei postări:

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

//Aici adaugă bucla pentru afișarea postărilor, de exemplu:

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

the_title();

the_content();

endwhile; wp_reset_query();

//După aceea, sări peste trei postări folosind 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();

?>

Gata.

18 sept. 2015 18:33:27
Comentarii

dar asta încurcă paginarea, adică paginarea nu funcționează..oricum mulțumesc pentru răspuns

Megh Gandhi Megh Gandhi
18 sept. 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

Ei bine, am urmat această metodă și am făcut câteva modificări la ea...

// în functions.php
$mega = new WP_Query('order=asc&orderby=meta_value&meta_key=date&posts_per_page=3');
//setează numărul de articole pe pagină la 3, astfel încât ID-urile primelor 3 articole vor fi afișate 
$ids = array();
while ($mega->have_posts()) : $mega->the_post();
$ids[] = get_the_ID();

endwhile;

După aceea, pentru bucla principală pentru a sări peste primele trei articole, pe care am modificat-o puțin.

   $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);

Și funcționează exact cum am dorit..

18 sept. 2015 22:46:38
5

Folosind parametrul 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 sept. 2015 17:59:17
Comentarii

încurcă paginarea.. ?paged=2 afișează aceleași postări

Megh Gandhi Megh Gandhi
18 sept. 2015 18:12:27

@MeghGandhi înțelegi că problema paginării nu are nicio legătură cu setarea parametrului offset. Interogarea ta deja strică paginarea.

Robert hue Robert hue
18 sept. 2015 20:45:54

de fapt WordPress generează propriul offset care face ca paginarea să funcționeze, iar când setăm manual parametrii, paginarea se strică.. http://codex.wordpress.org/Making_Custom_Queries_using_Offset_and_Pagination

Megh Gandhi Megh Gandhi
18 sept. 2015 21:01:43

Aș mai verifica o dată paginarea... poate fi dificil de implementat corect uneori. Te rog să încerci interogarea fără proprietățile posts_per_page și paged și vezi dacă paginează corect conform setărilor implicite din WordPress (Setări > Citire).

deflime deflime
18 sept. 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 ei bine, am folosit această metodă și am adăugat codul în funcții și funcționează, ura!

Megh Gandhi Megh Gandhi
18 sept. 2015 22:35:58
0

În loc să folosești atributul offset, te-ai gândit să creezi o variabilă cu valoarea 1 care să fie incrementată în buclă. Dacă bucla este mai mică decât 4, nu face nimic, altfel:

<?php
    $p=1;
    while ( have_posts() ) : the_post();
        if($p > 3) {
?>
// EXECUTĂ ACȚIUNI

Aceasta nu rezolvă problema direct, dar poți seta o condiție astfel încât, dacă este prima pagină, să sari peste primele 3 postări?

28 oct. 2016 19:58:02