it-swarm.com.de

Benutzerdefinierte Archivseite für Beitragstypen: Beiträge pro Seite festlegen, paginieren

Ich habe einen benutzerdefinierten Beitragstyp namens video. Möchte seine Archivseite paginieren und nur 3 Beiträge auf jeder Seite anzeigen.

Es gibt auch eine benutzerdefinierte Schleife auf der Archivseite, die all die Videobeiträge ausgibt (für eine Miniaturansichtsgalerie).

Dies ist der archive-video.php:

<?php while( have_posts() ) : the_post(); ?>
    MAIN LOOP...
<?php endwhile; wp_reset_query(); ?>

<?php next_posts_link(); previous_posts_link(); >

<?php $custom_loop = new WP_Query( array('post_type' => 'video', 'posts_per_page' => '-1' ) );
<?php while ( $custom_loop->have_posts() ) : $custom_loop->the_post(); ?>
    CUSTOM LOOP...
<?php endwhile; ?>

Ich habe versucht, den posts_per_page mit pre_get_posts auf 3 zu setzen (Code hier) . Die Paginierung würde perfekt funktionieren, aber die benutzerdefinierte Schleife gibt nur noch 3 Posts und nicht mehr alle Posts aus!

Jemand mit einer hartcodierten/nicht-Plugin-Lösung? Haben ohne Erfolg gegoogelt ... Jeder Rat/Hilfe wäre sehr dankbar !!!

4
asymptote

Der Code in dem Link, den Sie gepostet haben (mit pre_get_posts), ändert immer die Anzahl posts_per_page auf 3, wenn Sie Posts von diesem Typ abfragen. Eine bessere Lösung wäre es, diesen Code nicht zu verwenden und einfach über dem Code zu stehen, bevor:

<?php while( have_posts() ) : the_post(); ?>

hinzufügen:

if ( get_query_var('paged') )
    $paged = get_query_var('paged');
elseif ( get_query_var('page') )
    $paged = get_query_var('page');
else
    $paged = 1;
query_posts(array('post_type' => 'video', 'posts_per_page' => '3', 'paged' => $paged ));

dies wirkt sich nur auf diese Abfrage und nicht auf alle Abfragen dieses Beitragstyps aus.

Aktualisieren:

die Struktur Ihres Codes sollte folgendermaßen aussehen:

if ( get_query_var('paged') )
    $paged = get_query_var('paged');
elseif ( get_query_var('page') )
    $paged = get_query_var('page');
else
    $paged = 1;
query_posts(array('post_type' => 'video', 'posts_per_page' => '3', 'paged' => $paged ));
while( have_posts() ) : the_post(); 
    //MAIN LOOP...
endwhile; wp_reset_query(); 

next_posts_link(); previous_posts_link(); 

$custom_loop = new WP_Query( array('post_type' => 'video', 'posts_per_page' => '-1' ) );
while ( $custom_loop->have_posts() ) : $custom_loop->the_post();
    //CUSTOM LOOP...
endwhile;
wp_reset_query(); 
4
Bainternet

Versuchen Sie 'paged' => $paged, nach new WP_Query( array('post_type' => 'video', und ändern Sie 'posts_per_page' => '-1' in 'posts_per_page' => '3'

1
MartinJJ

In Ihrem Fall würde ich den Haken pre_get_posts verwenden und die Hauptabfrage filtern. Füge den folgenden Code zu deiner functions.php hinzu

add_action( 'pre_get_posts', function ( $query ) {
  if ( $query->is_post_type_archive( 'video' ) && $query->is_main_query() && ! is_admin() ) {
    $query->set( 'posts_per_page', 3 );
  }
} );

Hoffe das hilft!

0
Robert Bokori