Fügen Sie Haftnotizen in die Anzahl der Seitenaufrufe für benutzerdefinierte Abfragen ein

Dieser Link triggers das Problem, aber es ist nur für die Hauptabfrage. Was ist, wenn Sie eine benutzerdefinierte Abfrage verwenden? Wie können Sie die folgende Antwort ändern :

add_action('pre_get_posts', 'ad_custom_query'); function ad_custom_query($query) { if ($query->is_main_query() && is_home()) { //how can we for specific custom query? // set the number of posts per page $posts_per_page = 12; // get sticky posts array $sticky_posts = get_option( 'sticky_posts' ); // if we have any sticky posts and we are at the first page if (is_array($sticky_posts) && !$query->is_paged()) { // counnt the number of sticky posts $sticky_count = count($sticky_posts); // and if the number of sticky posts is less than // the number we want to set: if ($sticky_count set('posts_per_page', $posts_per_page - $sticky_count); // if the number of sticky posts is greater than or equal // the number of pages we want to set: } else { $query->set('posts_per_page', 1); } // fallback in case we have no sticky posts // and we are not on the first page } else { $query->set('posts_per_page', $posts_per_page); } } } 

Solutions Collecting From Web of "Fügen Sie Haftnotizen in die Anzahl der Seitenaufrufe für benutzerdefinierte Abfragen ein"

Ich denke, wir können Folgendes versuchen: ( Hinweis: Dies ist nicht getestet, sollte aber theoretisch funktionieren, aber denken Sie daran, es ist ungeprüft und kann errorshaft sein)

 add_action('pre_get_posts', 'ad_custom_query'); function ad_custom_query($query) { // No other checks should be necessary if ( $query->get( 'custom_query' ) === 1 ) ) { // set the number of posts per page $posts_per_page = 12; // get sticky posts array $sticky_posts = get_option( 'sticky_posts' ); // if we have any sticky posts and we are at the first page if (is_array($sticky_posts) && !$query->is_paged()) { // counnt the number of sticky posts $sticky_count = count($sticky_posts); // and if the number of sticky posts is less than // the number we want to set: if ($sticky_count < $posts_per_page) { $query->set('posts_per_page', $posts_per_page - $sticky_count); // if the number of sticky posts is greater than or equal // the number of pages we want to set: } else { $query->set('posts_per_page', 1); } // fallback in case we have no sticky posts // and we are not on the first page } else { $query->set('posts_per_page', $posts_per_page); } } } 

Sie können jetzt einfach die folgende benutzerdefinierte Abfrage ausführen

 $args = [ 'custom_query' => 1, // Note, this has to be an integer, '1' will not work 'paged' = > $paged // I would just add all the other parameters in the pre_get_posts action ]; $q = new WP_Query( $args ); 

Einige Anmerkungen:

  • Da wir nur auf Abfragen abzielen, bei denen der neue Parameter custom_query auf 1 , sollten wir keine Überprüfungen wie !is_admin() oder is_main_query()

  • Da wir eine pre_get_posts Aktion für unsere benutzerdefinierte Abfrage pre_get_posts , würde ich einfach den Parameter custom_query und paged in Abfrageargumenten custom_query . Irgendwelche anderen Parameter würde ich einfach nur in der pre_get_posts Aktion hinzufügen.

  • Wenn Sie eine zweite Abfrage mit anderen Parametern und / oder Werten custom_query , können Sie einfach custom_query auf 2 und dann einchecken, wenn $query->get( 'custom_query' ) Wert 2 , wie if ( $query->get( 'custom_query' ) === 2 ) {

  • Ich habe gerade Ihren Code kopiert und die neue Parameterprüfung hinzugefügt, ich habe Ihren Code nicht bearbeitet oder geändert

Anstatt eine function zu erstellen, habe ich die Schleife nur mit der benutzerdefinierten Abfrage bearbeitet. Mein Beispiel zeigt nur einen einzigen Beitrag.

Ich habe nur wenn statement verwendet, wenn eine oder mehrere klebrig nur die erste klebrig zeigen.

 < ?php $sticky_posts = get_option( 'sticky_posts' ); $sticky_count = count($sticky_posts); if($sticky_count >= 1) { $loop = new WP_Query('p=' . $sticky_posts[0]); //show only first sticky } else { $loop = new WP_Query( array( 'post_type' => 'post', 'category__not_in' => 'featured', 'posts_per_page' => 1 ) ); //if none show just the first non-sticky post } while ( $loop->have_posts() ) : $loop->the_post(); ?>