web-dev-qa-db-fra.com

La pagination de boucle secondaire sur un type de message personnalisé, poste unique, est redirigée vers la première page

Je voudrais publier les articles liés sur une seule page personnalisée. Tout semble être configuré correctement. Lorsque je survole mes liens de pagination, je vois http://example.com/post-type-slug/post-slug/page/2/. Quand je clique dessus, je vais à cette page, mais je suis redirigé vers la première page: http://example.com/post-type-slug/post-slug/

Voici comment j'ai configuré mon type de message:

register_post_type( 'posttype',
    array(
        'rewrite' => array(
            'slug' => 'post-type-slug',
            'with_front' => false,
        ),
        'public' => true,
        'publicly_queryable' => true,
        'exclude_from_search' => true,
        'has_archive' => false,
        'menu_position'=>5,
    )
);

Voici comment je fais mon WP_query sur la page unique

    $queryArgs = array( 
        'posts_per_page' => 3,
    );
    $queryArgs['paged'] = get_query_var( 'page' ) ? get_query_var('page') : 1; 
    $customQuery = new WP_Query( $queryArgs );

Pour ma pagination, j'utilise la méthode décrite ici: https://wordpress.stackexchange.com/a/172818/10595

Pourquoi suis-je redirigé vers l'index? Que puis-je faire pour empêcher cela?.

J'ai vérifié certaines choses: Lorsque je désactive les liens permanents, les liens de pagination disent http://example.com/? posttype=post-slug&paged=2. Lorsque je modifie manuellement ceci en http://example.com/? posttype=post-slug&page=2, tout fonctionne comme je le souhaite. Comment puis-je modifier ma pagination pour le faire pour moi?

2
Florian

J'ai trouvé la réponse. J'avais cherché haut et bas hier, mais aujourd'hui je l'ai finalement trouvé: https://wordpress.stackexchange.com/a/143837/10595

add_action('template_redirect', function() {
  if ( is_singular('posttype') ) {
    global $wp_query;
    $page = (int) $wp_query->get('page');
    if ( $page > 1 ) {
      // convert 'page' to 'paged'
      $query->set( 'page', 1 );
      $query->set( 'paged', $page );
    }
    // prevent redirect
    remove_action( 'template_redirect', 'redirect_canonical' );
  }
}, 0 ); // on priority 0 to be able removing 'redirect_canonical' added with priority 10

Ceci, copié dans mon fichier functions.php, permet à WordPress de reconnaître le paramètre paged sur une seule entrée posttype.

0
Florian