web-dev-qa-db-fra.com

Pagination sur une boucle de type de publication personnalisée

J'ai lu beaucoup de questions sur ce sujet. Aucun d'entre eux ne résout mon problème.

Poblem : la pagination est montrée à la page 1 mais la page 2 renvoie 404.

La requête et la boucle sont dans 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

J'ai trouvé la réponse finale ici: https://wordpress.stackexchange.com/a/217534/77722

La page 2 de la page d'accueil prenait la pagination à partir de la requête principale, pas de ma requête personnalisée.

J'ai pris ces actions:

1. Pour changer le nom de front-page.php en index.php afin d’obtenir la requête principale chaque fois que la page est chargée (même si elle est paginée)

2. Pour changer la requête principale avec pre_get_posts afin d’afficher les posts de mon CPT:

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. Faites une boucle normale dans le fichier index.php:

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

Marche parfaitement!

2
aitor

J'ai trouvé ici une solution de contournement: Correctif de type de message personnalisé 404?

Puisque je ne le comprends pas, je ne marque pas cette question comme résolue. Toute explication à ce sujet sera appréciée.

Je dois faire deux actions ensemble:

  1. Définissez 1 la limite de publication dans le tableau de bord admin> reading.
  2. Ajouter cette fonction:

.

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

Cela fonctionne, mais je ne sais pas quels effets secondaires auront cela.

1
aitor