Проблема, Делающая WP_Query, разбита на страницы

Я использую запрос ниже в index.php файле как основной запрос, каждый раз, когда я пытаюсь перейти к 2-й странице, я получаю 404 ошибки, я пытался использовать posts_per_page, но напрасно.

<?php
    $args = array(
  'post_type' => array( 'post', 'videos', 'music' ),
  'tax_query' => array(
     array(
       'taxonomy' => 'content',
       'field'    => 'slug',
       'terms'    => 'indy',
       'operator' => 'NOT IN' 
     )
   )
);
        $products = new WP_Query( $args );
        if( $products->have_posts() ) {
            while( $products->have_posts() ) {
                $products->the_post();
                ?>

Do stuff here.

<?php }
        }
        else {
            echo 'Oh boy, no posts available';
        } ?>

Что я пропускаю?

0
05.03.2013, 06:56
3 ответа

Разбиение на страницы в URL только работает на "основной" запрос. То, что Вы создали, является вторичным запросом, таким образом, WordPress не "знает" об этом таким способом, которым приложение смогло бы создать разбиение на страницы. Если Вы используете вторичный запрос (как Ваш пример) Вам решать, чтобы сделать материал разбиения на страницы вручную.

Вместо того, чтобы создавать новый запрос, я предложил бы, чтобы Вы изменили "основной" запрос с pre_get_posts рычаг. Пример:

<?php
add_action('pre_get_posts', 'wpse89413_pre_posts');
function wpse89413_pre_posts($query)
{
    // make sure you're on the blog page and altering the main query
    if (is_home() && $q->is_main_query()) {
        $query->set('post_type', array('post', 'videos', 'music'));

        $query->set('tax_query', array(array(
           'taxonomy' => 'content',
           'field'    => 'slug',
           'terms'    => 'indy',
           'operator' => 'NOT IN' 
        )));
    }
}
2
19.02.2020, 23:50
  • 1
    я не уверен, как повысить это, я пытался работать он в свой запрос выше, но его или повреждаю тему или возвращаю 404 на домашней странице. –  Chozen 06.03.2013, 03:08

Посмотрите Добавление Параметра $paged к запросу в кодексе. Вы захотите сделать что-то вроде этого:

$paged = (get_query_var('paged')) ? get_query_var('paged') : 1; //or use the global $paged 

$args = array(
  'post_type' => array( 'post', 'videos', 'music' ),
  'posts_per_page' => -1, //-1 for all post that match query
   'paged' => $paged, //get current page 
   'tax_query' => array(
     array(
       'taxonomy' => 'content',
       'field'    => 'slug',
       'terms'    => 'indy',
       'operator' => 'NOT IN' 
     )
   )
);

//loop code 

Однако, поскольку Chris сказал, что это только работает основной запрос, таким образом, необходимо будет сделать:

        $temp = $wp_query; //save the main loop query for later use
        $wp_query= null; //set the current query to null
        $wp_query = new WP_Query($args); //get your args

 //do some sweet loop action

$wp_query = null; //set custom query to null
$wp_query = $temp; //rest main query back to the way things were
wp_reset_query(); //reset the main query

Посмотрите этот вопрос или пользовательский запрос Google, не работающий с разбиением на страницы для нахождения этого того же решения на других сайтах.

0
19.02.2020, 23:50
  • 1
    Что делает мой запрос вторичным и как я могу сделать его основным запросом? –  Chozen 06.03.2013, 03:13
  • 2
    Это вторично, потому что это - второй запрос на странице. IE основной цикл страницы, мы называем основной запрос чем-либо дополнительным, становится вторичным к этому. Можно использовать решение chrisguitarguy изменить основной запрос на той странице к запросу. –  Brooke. 06.03.2013, 05:47

Решенный, я устал от Тринга, чтобы заставить его работать в index.php файле и закончил тем, что использовал funtions.php файл вместо этого.

Я сделал следующее.

add_action( 'pre_get_posts', 'add_my_custom_post_type' );

function add_my_custom_post_type( $query ) {
    if ( is_home() && $query->is_main_query() )
        $query->set( 'post_type', array( 'post', 'music', 'videos' ) );
        $query->set('tax_query', array(array(
           'taxonomy' => 'content',
           'field'    => 'slug',
           'terms'    => 'indy',
           'operator' => 'NOT IN' 
        )));
    return $query;
}

Разбиение на страницы и фильтрующий работу отлично.

0
19.02.2020, 23:50

Теги

Похожие вопросы