В моем шаблоне 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' );