it-swarm.com.de

Paginierung in einer herkömmlichen Post-Typ-Schleife

Ich habe viele Fragen zu diesem Thema gelesen. Keiner von ihnen löst mein Problem.

Poblem : Paginierung wird auf Seite 1 angezeigt, aber Seite 2 gibt 404 zurück.

Die Abfrage und die Schleife befinden sich in front-page.php:

// WP_Query arguments
$args = array(
  'post_type'              => 'trabajo',
  'posts_per_page'         => '2',
  'paged'                  => ( get_query_var('paged') ) ? get_query_var('paged') : 1,
);

// The Query
$trabajo_query = new WP_Query( $args );
$temp_query = $wp_query;
$wp_query   = NULL;
$wp_query   = $trabajo_query;


// The Loop
if ( have_posts() ) {
    while ( have_posts() ) {
        the_post();
        the_title();
    }
}
wp_reset_postdata();
the_posts_navigation();

$wp_query = NULL;
$wp_query = $temp_query;  // Reset
1
aitor

Die endgültige Antwort fand ich hier: https://wordpress.stackexchange.com/a/217534/77722

Auf Seite 2 der Titelseite wurde die Paginierung von der Hauptabfrage übernommen, nicht von meiner benutzerdefinierten Abfrage.

Ich habe folgende Maßnahmen ergriffen:

1. Um den Namen von front-page.php in index.php zu ändern um die Hauptabfrage jedes Mal zu erhalten, wenn eine Seite geladen wird (auch wenn sie paginiert ist)

2. So ändern Sie die Hauptabfrage mit pre_get_posts , um Posts meines CPT anzuzeigen:

add_action( 'pre_get_posts', function ( $q ) {
    if (    $q->is_home() && $q->is_main_query() ) {
        $q->set( 'posts_per_page', 1 );
        $q->set( 'post_type', 'trabajo');
    }
});

3. Mache eine normale Schleife in der index.php:

if ( have_posts() ) {
    while ( have_posts() ) {
        the_post();
        the_title();
    }
}
wp_reset_postdata();
the_posts_navigation();

Funktioniert perfekt!

2
aitor

Ich fand hier eine Problemumgehung: Benutzerdefinierte Beitragstyp Paginierung 404 beheben?

Da ich es nicht verstehe, markiere ich diese Frage nicht als gelöst. Jede Erklärung hierfür wird geschätzt.

Ich muss zwei Aktionen zusammen ausführen:

  1. Stellen Sie 1 das Beitragslimit im admin> reading-Dashboard ein.
  2. Fügen Sie diese Funktion hinzu:

.

add_action( 'parse_query','changept' );
function changept() {
    if( !is_admin() )
        set_query_var( 'post_type', array( 'post', 'trabajo' ) );
    return;
}

Es funktioniert, aber ich weiß nicht, welche Nebenwirkungen dies haben werden.

1
aitor