Wie wähle ich eine bestimmte Abfrage beim Setzen von Offset?

In WordPress habe ich eine function hinzugefügt, die den Offset wie folgt setzt:

add_action('pre_get_posts', 'myprefix_query_offset', 1 ); function myprefix_query_offset(&$query) { if ( ! $query->is_home() ) { return; } $offset = 1; $ppp = 3; if ( $query->is_paged ) { $page_offset = $offset + ( ($query->query_vars['paged']-1) * $ppp ); $query->set('offset', $page_offset ); } else { $query->set('offset',$offset); } } 

Mit dieser function wird ein Offset von 1 hinzugefügt, sodass der erste Beitrag nicht angezeigt wird. Was perfekt funktioniert.

Aber mit ‘! Query-> is_home’ schneidet es natürlich jeden ersten Post von jeder einzelnen Suchanfrage auf meiner Website ab.

Was ich tun muss, ist diese function auf nur eine Abfrage anzuwenden.

Meine Frage ist also: Wie kann ich eine bestimmte Abfrage auswählen, ist das möglich, muss ich es auch anders machen?

______________________Lösung, die für mich funktioniert hat__________________________

Ich konnte den Parameter ‘offset’ in der Schleife auf meiner Template-Seite ‘page-blog.php’ so setzen, ohne die Paginierung zu unterbrechen (in functions.php):

 add_action('pre_get_posts', 'myprefix_query_offset', 1 ); function myprefix_query_offset(&$query) { if ( !is_page_template( 'page-blog.php' ) ) { return ; } $offset = 1; $ppp = 3; if ( $query->is_paged() ) { $page_offset = $offset + ( ($query->query_vars['paged']-1) * $ppp ); $query->set('offset', $page_offset ); } else { $query->set('offset',$offset); } } 

Jetzt wendet es den Offset-Parameter auf alle Seiten auf dieser Seite an, die ausgelagert werden. Um es nur auf die Abfragen anzuwenden, die ausgelagert wurden, musste ich den Parameter “posts_per_page” => -1 ‘zu der Abfrage hinzufügen, die nicht ausgelagert wird und keinen Offset benötigt. Also in meinem Fall war das:

 $featured_item = array( 'post_type'=> 'post', 'status' => 'publish', 'posts_per_page'=> -1 ); get_posts($featured_item); 

Diese Lösung erlaubt es, den neuesten Post separat anzuzeigen und natürlich den gesamten Post mit einem Paginierung und Offset. Vielleicht wird jemand dafür Verwendung haben.

Vielen Dank an s_h_dum, ich bin immer dankbar für deine Hilfe!

Solutions Collecting From Web of "Wie wähle ich eine bestimmte Abfrage beim Setzen von Offset?"

Wenn Sie nur die eine einzige Abfrage ausführen möchten, können Sie das offset Argument nur durch das Argumentarray übergeben.

 $offset = 1; $ppp = 3; if ( $query->is_paged ) { $page_offset = $offset + ( ($query->query_vars['paged']-1) * $ppp ); } blog_items = array( 'post_type'=> 'post', 'paged' => $paged, 'posts_per_page'=> $ppp, 'status' => 'publish', 'offset' => $offset ); $blogposts = get_posts($blog_items); 

Aber da Sie versuchen zu paginieren, können Sie immer noch Probleme damit haben. Es mag besser sein, alle Argumente durch pre_get_posts zu schieben, nicht nur einige von ihnen:

 // in functions.php add_action('pre_get_posts', 'myprefix_query_offset', 1 ); function myprefix_query_offset(&$query) { if (is_main_query() || is_page_template( 'page-blog.php' ) ) { $offset = 1; $ppp = 3; if ( $query->is_paged ) { $page_offset = $offset + ( ($query->query_vars['paged']-1) * $ppp ); $query->set('offset', $page_offset ); } else { $query->set('offset',$offset); } $query->set('post_type','post'); $query->set('paged',$paged); $query->set('posts_per_page',3); $query->set('status','publish'); } } 

Dann sollte eine normale Schleife in der Seitenvorlage funktionieren:

 if(have_posts()) { while(have_posts()) { the_post(); } } 

Verwenden Sie remove_action('pre_get_posts', 'myprefix_query_offset', 1 ); um die Aktion zu entfernen.