2016-01-11 3 views
0

В принципе, я хочу сначала показать элементы, у которых есть тег «Featured», а затем показать все элементы, у которых нет тега «Featured», а затем разбивать страницы на страницы . результатыОбъедините два разных запроса в один и разложите запрос - wordpress

$featured = array(
'post_type' => 'aircraft-refueling', 
'tag' => 'featured' 
); 
$not_featured = array(
'post_type' => 'aircraft-refueling', 
'tag__not_in' => array('592') 
); 

Вот пагинация:

function pagination() 
{ 
global $wp_query; 
$big = 999999999; 
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 
)); 
} 

Я не слишком хорошо знакомы с PHP, но я предполагаю, что мне нужно, чтобы объединить запросы в новый запрос, а затем постраничной что новый запрос «Помощь очень ценится! Если есть лучший способ, пожалуйста, сообщите также.

EDIT: Вот мой прогресс. Я почти получил это, чтобы работать, но я получаю сообщение об ошибке с этим кодом, даже если это выглядит хорошо для меня ...?

<?php 
$featured = get_posts(array(
    'post_type' => 'aircraft-refueling', 
    'tag' => 'featured' 
    )); 
$notfeatured = get_posts(array(
    'post_type' => 'aircraft-refueling', 
    'tag__not_in' => array('592') 
    )); 
$mergedposts = array_merge($featured, $notfeatured); 

$postids = array(); 
foreach($mergedposts as $item) { 
$postids[]=$item->ID; 
} 
$uniqueposts = array_unique($postids); 

$posts = get_posts(array(
    'post__in' => $uniqueposts, 
    'post_type' => 'aircraft-refueling', 
    'post_status' => 'publish' 
    )); 
foreach($posts as $post) : 
setup_postdata($post); 
?> 

Тогда стандартный запрос:

<?php if (have_posts()) : while (have_posts()) : the_post(); ?> 
// THE CONTENT 
<?php endwhile; ?> 
<?php endif; ?> 

ответ

0

Из представленной выше коды я не могу понять, как запустить цикл, который отображение данных. Если вы сделали:

<?php foreach($posts as $post) : 
    setup_postdata($post); 
endforeach; ?> 

, то нет никакой необходимости со второго цикла:

while (have_posts()) : the_post(); ?> 
// THE CONTENT 
<?php endwhile; ?> 

потому setup_postdata() и the_post() делали в основном то же самое - они установки глобального $post объекта с данными из цикла так шаблонные теги подобный the_title(), the_ID() .. может работать должным образом.

Так что вы должны сделать:

Если вы используете query_posts()

foreach ($posts as $post): 
    setup_postdata($post) 
//THE CONTENT (the_title(), the_ID() will work 
endforeach; 

или если вы используете WP_Query() - Я думаю, что это лучший способ

$posts = new WP_Query(array(
    'post__in' => $uniqueposts, 
    'post_type' => 'aircraft-refueling', 
    'post_status' => 'publish' 
)); 

if($posts->have_posts()): 
    while($posts->have_posts()): $posts->the_post() 
    //THE CONTENT (the_title(), the_ID() will work 
    endwhile; 
endif; 

В обоих случаях вы должны сделать wp_reset_postdata() после петли

Во многих случаях если вы сделали запрос с custom_post_types это сломало пагинацию :) Если это так: css-tricks

И последнее: неужели вам нужен этот array_unique чек? Сообщение или есть или не имеют этого тега ...

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