cyril
  • 0
Новичок

Разбивка на страницы выдает 404

  • 0

У меня возникают проблемы с нумерацией страниц при отображении пользовательских типов сообщений. Я хотел бы отобразить 9 сообщений, а затем отобразить числовую разбивку на страницы. Это работает, некоторые ссылки генерируются с (для меня) правильными URL-адресами: http://mywebsite/tutorial/page/2 или http://mywebsite/tutorial/taxonomy/page/2, но они всегда заканчиваются на странице 404.

Любая идея приветствуется, ниже приведен мой код, так что если вы видите какие-либо проблемы 🙂

Спасибо заранее.

Кирилл

<?php
    $args = array(
        'post_type' => 'tutorial',
        'paged' => ((get_query_var('paged')) ? get_query_var('paged') : 1),
        'posts_per_page' => 9
    );
    query_posts($args);
?>

[MAIN LOOP]

<?php numeric_pagination(); ?>

Вот функция numeric_pagination() (найдена в Интернете, работает на другом сайте…):

function numeric_pagination($pages = '', $range = 2) {
global $paged;
$showitems = ($range * 2) + 1;
if(empty($paged)) $paged = 1;
if($pages == '') {
    global $wp_query;
    $pages = $wp_query->max_num_pages;
        if(!$pages) {
            $pages = 1;
        }
}   

if(1 != $pages) {
    echo '<div class="numeric-pagination"><p>';
    if($paged > 2 && $paged > $range+1 && $showitems < $pages) echo '<a href="'.get_pagenum_link(1).'">&laquo;</a>';
    if($paged > 1 && $showitems < $pages) echo '<a href="'.get_pagenum_link($paged - 1).'">&lsaquo;</a>';

    for ($i=1; $i <= $pages; $i++) {
        if (1 != $pages &&( !($i >= $paged+$range+1 || $i <= $paged-$range-1) || $pages <= $showitems )) {
            echo ($paged == $i)? '<span class="current">'.$i.'</span>':'<a href="'.get_pagenum_link($i).'" class="inactive" >'.$i.'</a>';
        }
    }

    if ($paged < $pages && $showitems < $pages) echo '<a href="'.get_pagenum_link($paged + 1).'">&rsaquo;</a>';  
    if ($paged < $pages-1 &&  $paged+$range-1 < $pages && $showitems < $pages) echo '<a href="'.get_pagenum_link($pages).'">&raquo;</a>';
    echo '</p></div>';
}

}

Возможно, есть проблема с моим пользовательским типом сообщений и моими таксономиями, поэтому я также даю код для этого:

/* POST TYPE */

add_action('init','create_tutorials_post_type');
function create_tutorials_post_type() {
    // Labels
    $labels = array(
        'name' => 'Tutorials',
        'singular_name' => 'Tutorial',
        'add_new' => 'Add new',
        'add_new_item' => 'Add new tutorial',
        'edit_item' => 'Edit',
        'new_item' => 'New tutorial',
        'view_item' => 'View tutorial',
        'search_items' => 'Search tutorial',
        'not_found' =>  'No tutorial found',
        'not_found_in_trash' => 'No tutorial found in trash', 
        'parent_item_colon' => '',
        'menu_name' => 'Tutorials'
    );
    // Arguments
    $args = array(
        'labels' => $labels,
        'public' => true,
        'publicly_queryable' => true,
        'show_ui' => true, 
        'show_in_menu' => true, 
        'query_var' => true,
        'rewrite' => true,
        'capability_type' => 'post',
        'has_archive' => true, 
        'hierarchical' => false,
        'menu_position' => null,
        'supports' => array('title','editor','author','thumbnail','excerpt','comments')
    );
    // Register post type
    register_post_type('tutorial',$args);
}

/* TAXONOMY */

add_action('init','create_tutorials_taxonomies');
function create_tutorials_taxonomies() {
    // Labels
    $labels = array(
        'name' => 'Tutorial types',
        'singular_name' => 'Tutorial type',
        'search_items' => 'Search a type',
        'all_items' => 'All types',
        'parent_item' => 'Parent type',
        'parent_item_colon' => 'Parent type:',
        'edit_item' => 'Edit type', 
        'update_item' => 'Update type',
        'add_new_item' => 'Add new type',
        'new_item_name' => 'New tutorial type',
        'menu_name' => 'Types'
    );
    // Arguments
    $args =  array(
        'hierarchical' => true,
        'labels' => $labels,
        'show_ui' => true,
        'query_var' => true,
        'rewrite' => array('slug' => 'tutorials', 'hierarchical' => true)
    );
    // Register taxonomy
    register_taxonomy('tutorial_type',array('tutorial'),$args);
}
Share
  1. Измените предопределенное значение posts_per_page на минимальное значение в настройках WordPress или добавьте код ниже в functions.php. WordPress с параметром по умолчанию. Например: 10. И если ваши настройки в query_posts или WP_Query выглядят как «posts_per_page=>2», а количество сообщений в пользовательском типе сообщений меньше 10, после нажатия на /page/2/ вы будете перенаправлены на страницу 404.

    Используйте этот код для functions.php для решения проблемы:

    if( !is_admin() ){  
        add_action( 'pre_get_posts',  'set_per_page'  );
    }
    function set_per_page( $query ) {
        global $wp_the_query;
        if($query->is_post_type_archive('tutorial')&&($query === $wp_the_query)){
        $query->set( 'posts_per_page', 1);
        }
      return $query;
    }
    
    • 0
  2. Эй, у меня была похожая проблема.

    Проблема заключалась в том, что WordPress настроен на отображение 10 сообщений на странице по умолчанию, что противоречило моему запросу (ограничивая его до 2 сообщений), чтобы исправить проблему, я изменил параметр WordPress («Настройки / Чтение» на панели администратора) на 1.

    • 0
  3. Я бы использовал paginate_links() для этого:

    global $wp_query;
    
    $big = 999999999; // need an unlikely integer
    
    echo paginate_links( array(
        'base' => str_replace( $big, '%#%', get_pagenum_link( $big ) ),
        'format' => '?paged=%#%',
        'current' => max( 1, get_query_var('paged') ),
        'total' => $wp_query->max_num_pages
    ) );
    

    Это последний и лучший пример из статьи кодекса, ссылка на которую приведена выше. Как правило, лучше использовать основную функцию всякий раз, когда предоставляется возможность.

    • 0
  4. Я знаю, что это очень старый вопрос, но если кто-то столкнется с этой проблемой, попробуйте следующее:

    Установите «posts_per_page = x» в вашем php-коде на то же значение, что и «Настройки чтения» в области администрирования. Поэтому, если ‘posts_per_page = 3’, в настройках чтения ‘Максимум отображаемых страниц блога’ также должно быть установлено значение 3.

    • 0

Оставить ответ

You must login to add an answer.