Я использую запрос ниже в 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';
} ?>
Что я пропускаю?
Разбиение на страницы в 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'
)));
}
}
Посмотрите Добавление Параметра $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, не работающий с разбиением на страницы для нахождения этого того же решения на других сайтах.
Решенный, я устал от Тринга, чтобы заставить его работать в 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;
}
Разбиение на страницы и фильтрующий работу отлично.