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
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!
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
la limite de publication dans le tableau de bord admin> reading..
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.