Paginate WPQuery перенаправить на страницу 1 - PullRequest
0 голосов
/ 10 марта 2020

В моем шаблоне Wordpress я делаю запрос WP, чтобы перечислить все города в определенных c регионах (пользовательский тип записи). В некоторых случаях в регионах насчитывается более 3000 городов, поэтому запрос слишком тяжелый и не хватает памяти. Поэтому я использую функцию paginate_links для разбивки на страницы каждого списка, когда есть более 500 результатов. Он работает нормально, но ссылки на страницы разбиваются на главную страницу.

Примеры:

http://www.example.fr/my-region/page/2

перенаправление на

http://www.example.fr/my-region, поэтому я никогда не могу получить доступ к страницам, разбитым на страницы.

Вот мой код (частично). Вы видите, что может вызвать эту проблему?

<?php

     $paged = ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : 1;
     $posts = array(
     'post_type' => 'commune',
     'posts_per_page'=> 500,
     'paged' => $paged,
     'orderby' => 'title',
     'order'=> 'ASC',
     'meta_key' => 'region',
     'meta_value' => $reg_region
      );  

     $communes = new WP_Query($posts );
     $nb_communes = $communes-> found_posts; 
     ?>

        <div class="col-8 main-content">

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


     <?php


     echo "<ul class=\"list-group\">";


          while ($communes->have_posts() ) { $communes->the_post();
      ?>
           <li class="list-group-item"><?php echo(get_field("commune")); ?> (<?php echo(get_field("cp"));    ?>) -  <a href="<?php echo get_permalink(); ?>"> <?php echo(get_field("civilite")); ?> <?php echo(get_field("prenom")); ?> <?php echo(get_field("nom")); ?> </a> </li>



     <?php
     } 
     echo "</ul>";
     ?>


     <?php endwhile; // end of the loop. ?>
     <div class="pagination">
      <?php 
        echo paginate_links( array(
            'base'         => str_replace( 999999999, '%#%', esc_url( get_pagenum_link( 999999999 ) ) ),
            'total'        => $communes->max_num_pages,
            'current'      => max( 1, get_query_var( 'paged' ) ),
            'format'       => '?paged=%#%',
            'show_all'     => false,
            'type'         => 'plain',
            'end_size'     => 500,
            'mid_size'     => 1,
            'prev_next'    => true,
            'prev_text'    => sprintf( '<i></i> %1$s', __( 'Précédent', 'text-domain' ) ),
            'next_text'    => sprintf( '%1$s <i></i>', __( 'Suivant', 'text-domain' ) ),
            'add_args'     => false,
            'add_fragment' => '',
        ) );
         ?>
     </div>

Я не знаю, связано ли это, но в моих функциях. php файл, у меня есть это переопределение, так что мой тип цистопоста пропускает / $ name_of_custom_post_type / в URL.

/**
 * Remove the slug from published post permalinks. Only affect our custom post type, though.
 */
function gp_remove_cpt_slug( $post_link, $post, $leavename ) {

$custom_post_types = array('departement', 'region', 'commune');

if ( ! in_array( $post->post_type, $custom_post_types ) || 'publish' != $post->post_status ) {

        return $post_link;

    }

    $post_link = str_replace( '/' . $post->post_type . '/', '/', $post_link );

    return $post_link;
}
add_filter( 'post_type_link', 'gp_remove_cpt_slug', 10, 3 );




/**
 * Have WordPress match postname to any of our public post types (post, page, race)
 * All of our public post types can have /post-name/ as the slug, so they better be unique across all posts
 * By default, core only accounts for posts and pages where the slug is /post-name/
 */
function gp_parse_request_trick( $query ) {

    // Only noop the main query
    if ( ! $query->is_main_query() )
        return;

    // Only noop our very specific rewrite rule match
    if ( 2 != count( $query->query ) || ! isset( $query->query['page'] ) ) {
        return;
    }

    // 'name' will be set if post permalinks are just post_name, otherwise the page rule will match
    if ( ! empty( $query->query['name'] ) ) {
        $query->set( 'post_type', array('post', 'departement', 'region', 'commune' ) );
    }
}


add_action( 'pre_get_posts', 'gp_parse_request_trick' );
...