2015-05-21 3 views
0

Моя проблема заключается в разбивке на страницы, которую я использую в Wordpress. Я использовал плагин WP Pagenavi. Я не совсем уверен, что с ним не так.Разбивка страницы: Страница 3 Не найдена в установке WordPress

Я нашел ответ на мою проблему, используя этот код:

<?php $paged = (get_query_var('paged')) ? get_query_var('paged') : 1; ?> 
<?php query_posts('cat=4&posts_per_page=15'.'&paged=' . $paged); ?> 

Но, к моему разочарованию, когда я уменьшил posts_per_page до 5, я могу получить пагинацию работать до стр.2, но когда я нажимаю страницу 3 и так далее, WordPress не может его найти. Я использовал другое решение из своих исследований:

<?php 
$limit = '5'; 
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1; 
query_posts('cat=4&showposts=' . $limit . '&paged=' . $paged); 
$wp_query->is_archive = true; $wp_query->is_home = false; 
?> 

Это все еще не помогло. Я не хочу прикасаться к functions.php. Я только редактирую category.php.

Проверьте мой блок кода ниже:

<?php if (is_category('category1')) { ?> 

<?php $paged = (get_query_var('paged')) ? get_query_var('paged') : 1; ?> 
<?php query_posts('cat=1&posts_per_page=15'.'&paged=' . $paged); ?> 

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

<!-- SOME CODE TO POST THE POST --> 

<?php endwhile; ?> 
<?php wp_pagenavi() ?> 
<?php endif; ?> 

<?php } else if (is_category('category2')) { ?> 

<?php $paged = (get_query_var('paged')) ? get_query_var('paged') : 1; ?> 
<?php query_posts('cat=2&posts_per_page=15'.'&paged=' . $paged); ?> 

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

<!-- SOME CODE TO POST THE POST --> 

<?php endwhile; ?> 
<?php wp_pagenavi() ?> 
<?php endif; ?> 

<?php } else if (is_category('category3')) { ?> 

<?php $paged = (get_query_var('paged')) ? get_query_var('paged') : 1; ?> 
<?php query_posts('cat=3&posts_per_page=5'.'&paged=' . $paged); ?> 

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

<!-- SOME CODE TO POST THE POST --> 

<?php endwhile; ?> 
<?php wp_pagenavi() ?> 
<?php endif; ?> 

<?php } else if (is_category('category4')) { ?> 

<?php $paged = (get_query_var('paged')) ? get_query_var('paged') : 1; ?> 
<?php query_posts('cat=4&posts_per_page=5'.'&paged=' . $paged); ?> 

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

<!-- SOME CODE TO POST THE POST --> 

<?php endwhile; ?> 
<?php wp_pagenavi() ?> 
<?php endif; ?> 

<?php } else { ?> 

<!-- SOME CODE --> 

<?php } ?> 

Пожалуйста, обратите внимание, что category1 и category2 дисплей 5 сообщений, а остальные 2 категории будут отображаться 15 сообщений. И все это в категории.php.I не хочу использовать # сообщений, заданных в настройках> Чтение.

Если вы думаете , если заявление и положить также кошка ID избыточно, ну, он не получает сообщения этой категории имени.

UPDATE

Я использовал этот код:

<?php $paged = (get_query_var('paged')) ? get_query_var('paged') : 1; ?> 
<?php $args = array ('post_type' => 'post','cat' => '4','posts_per_page' => '5','paged' => $paged);?> 
<?php $my_query = new WP_Query ($args);?> 

Опять же, это сработало, НО это только показывает две страницы! Я даже не знаю, где третья страница, возможно, должна быть 3-я страница.

+0

Никогда не используйте 'query_posts', он разбивает разбиение на страницы и основной запрос. Поскольку это ваш category.php, вам также не нужен пользовательский запрос, используйте цикл по умолчанию, а затем используйте 'pre_get_posts' для изменения основного запроса соответственно. –

+0

Я попытался использовать pre_get_posts, но никаких сообщений пока нет. Я не знаю почему. Извините, я плохо разбираюсь в PHP, поэтому объяснение довольно сложно понять. –

+0

Нет проблем, замечательно, что вы попробовали 'pre_get_posts'. Я думаю, что это просто недоразумение, которое заставило вас потерпеть неудачу. Я постараюсь опубликовать решение. Я отправляю с моего телефона, поэтому его сложно закодировать. Кроме того, я не могу проверить, что я код –

ответ

1

Ваш код имеет некоторые серьезные проблемы

  • Никогда не использовать query_posts, когда-либо. Он разбивает основной объект запроса, на который полагается так много плагинов и функциональных возможностей, он также разбивает разбиение на страницы и терпит неудачу, поэтому очень сложно отлаживать разбиение на страницы, когда оно терпит неудачу. Если вам действительно нужно использовать пользовательский запрос, вместо этого используйте WP_Query. Вы должны не торопиться, чтобы прочитать this post и все связанные сообщения. Это действительно полезно, поскольку он говорит вам, почему вы не должны использовать query_posts, и когда вы должны использовать пользовательские запросы, а не

  • Этот пункт связан с первым и связанным сообщением. Вы никогда не должны изменять основной запрос, чтобы использовать его на главной странице или на любой странице архива. Это всегда вызывает гораздо больше проблем, чем то, что на самом деле решает. Всегда используйте pre_get_posts, чтобы изменить основной запрос перед его запуском. Таким образом, вы позволяете основному запросу обрабатывать весь тяжелый подъем правильно, если вы не сломаете пот.

Теперь, чтобы решить проблему:

  • Прежде всего, удалите все ваши вопросы, и просто добавить этот код в своей категории.PHP (Не забудьте заменить функцию постраничной, wp_pagenavi())

    if (have_posts()) { 
        while (have_posts()) { 
        the_post(); 
    
         // Your loop with template tags and html mark up 
    
        } 
        wp_pagenavi(); 
    } 
    

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

  • Теперь мы будем использовать pre_get_posts, чтобы изменить количество сообщений для каждой категории. Для этого добавьте следующий код в файл functions.php (Требуется PHP 5.3+ и код тестировался)

    add_action('pre_get_posts', function ($q) 
    { 
        if (  !is_admin() // Very important, otherwise back end queries will be affected as well 
          && $q->is_main_query() // Very important, we just need to modify the main query 
          && $q->is_category() // Only target category pages 
        ) { 
         // Check on which category page we are and set posts_per_page accordingly 
         if ($q->is_category(array(1, 2))) 
          $q->set('posts_per_page', 15); 
    
         if ($q->is_category(array(3, 4))) 
          $q->set('posts_per_page', 5); 
        } 
    }); 
    

Это должно в основном это сделать.

+0

Другой вопрос, на моей странице администратора, сообщения также отображаются в том же количестве, что и в функции. –

+0

Это идентификаторы вашей категории, поэтому '$ q-> is_category (array (1, 2))' должен проверить, находитесь ли вы на странице категории 1 или 2 –

+0

O crap, синтаксическая ошибка, обновит мой код :-) –

0

Наконец-то мы пришли к окончательному ответу и рабочему коде!

Если вы прочитаете ответ г-на Питера Гузена выше, это поможет вам. Это действительно помогло мне. Итак, я дам вам окончательные ответы. Это фактически произвольное количество сообщений в каждой категории без учета того, что установлено в настройках.

Так что в моем category.php

<?php if (is_category('category1')) { ?> 
    <?php if (have_posts()) { 
    while (have_posts()) { 
    the_post(); 

     // Your loop with template tags and html mark up 

    } 
    wp_pagenavi(); 
} 
?> 

<?php } else if (is_category('category2')) { ?> 

<?php if (have_posts()) { 
    while (have_posts()) { 
    the_post(); 

     // Your loop with template tags and html mark up 

    } 
    wp_pagenavi(); 
} 
?> 

<?php } else if (is_category('category3')) { ?> 

<?php if (have_posts()) { 
    while (have_posts()) { 
    the_post(); 

     // Your loop with template tags and html mark up 

    } 
    wp_pagenavi(); 
} 
?> 

<?php } else if (is_category('category4')) { ?> 

<?php if (have_posts()) { 
    while (have_posts()) { 
    the_post(); 

     // Your loop with template tags and html mark up 

    } 
    wp_pagenavi(); 
} 
?> 

<?php } ?> 

ГДЕcategory1 и category2 будет отображаться 5 сообщений, category3 и category4 будет отображаться 15 сообщений.

Это то, что вы собираетесь разместить в своих функциях.php.

add_action('pre_get_posts', function($q) { 
    if (!is_admin() && $q->is_main_query() && $q->is_category()) { 
     if ($q->is_category(array(1,2))) { 
      $q->set('posts_per_page', 5); 
     } 
     if ($q->is_category(array(3,4))) { 
      $q->set('posts_per_page', 15); 
     } 
    } 
    return; 
}); 

ГДЕ номера внутри массива идентификаторов категории.

Если вы сравните мой код и сэра Питера, это почти то же самое, но я добавил return;, прежде чем add_action() будет закрыт. Но я цитирую, что сказал сэр Питер:

Это действительно странно, что вы должны вернуться. pre_get_posts - это действие , а не фильтр. Но в любом случае, рад, что это решается

Если он все еще не работает для вас, мой Permalink установлен в:

http://www.example.com/sample-post/[/%postname%/].

У меня также есть WP Нет Категория Base плагин не устранить /категорию/ в моей категории URL. Таким образом, вместо www.example.com/category/category1 будет www.example.com/category1.

0

Предполагая, что это может помочь тем, кто, как и я, используйте DIVI CHILD THEME!

Я, наконец, нашел решение, выполнив поиск divi pagination.

На самом деле, в моем случае, я создал дочернюю тему divi. Тем не менее, сообщение на странице на моей странице пользовательской категории установлено в 3, но в мою опцию divi> тема Число сообщений, отображаемых на странице категории, была установлена ​​на 6.

Вот почему страница 3 показывало ошибку 404. Таким образом, я поставил его на 1.

Я прочитал на пост, что «страницы Блог показать на наиболее» в настройки> чтение опции должны находиться под пользовательским запросом post_per_page (для домашней страницы), либо создать 404 страницу.

Однако, похоже, что количество сообщений, отображаемых в опции Divi, , переписывает страницы блога не более. Вот почему на мою страницу category.php, я застрял на странице 3.

Я оставляю вам мой крошечный код о моей пользовательской странице category.php для дивите темы ребенка:

<?php 
//query{ 
    //print_r(get_queried_object()); 
    $category = get_queried_object(); 
    $the_cat_nicename = $category->slug; 
    $the_cat_name = $category->name; 

    $paged = (get_query_var('paged')) ? get_query_var('paged') : 1; 

    $args_s = new WP_Query(array(
    'post_type' => 'post', 
    'category_name' => $the_cat_nicename, 
    'posts_per_page' => 3, 
    'paged' => $paged, 
    'orderby'=>'date', 
    'order'=>'DESC')); 
//query} 
if ($args_s->have_posts()) 
{ 
    echo $the_cat_name; 
    echo '<br/>'; 
    while ($args_s->have_posts()) 
    { 
     $args_s->the_post(); 
     $the_id=get_the_ID($post->ID); 
     echo $the_id.'<br/>'; 
    } 
    if ($args_s->max_num_pages > 1) 
    { 
     echo get_next_posts_link($GLOBALS['older_post_lang'], $args_s->max_num_pages); 
     echo get_previous_posts_link($GLOBALS['newer_post_lang']); 
    } 
} 
//wordpress _have_posts} 
?> 

Не забудьте установить ваше количество сообщений, отображаемых на странице категории, до 1 в Divi> параметр темы.

Смежные вопросы