2013-11-26 2 views
1

Я хочу, чтобы создавать пользовательские циклы с использованием query_posts или $ custom_query = new WP_Query() и иметь возможность делать липкие сообщения.Как заставить WordPress липкие сообщения работать в пользовательских циклах?

Например, у меня есть настраиваемый цикл на странице под названием «Новости», которая зацикливает сообщения в категории «новости» и создает из них красивую сетку масонства. Зацикленные элементы затем ссылаются на фактическую статью.

<?php $custom_query = new WP_Query('cat=8'); // boxes loop 
     while($custom_query->have_posts()) : $custom_query->the_post(); ?> 
     <div <?php post_class('newsbox box '); ?> id="post-<?php the_ID(); ?>"> 
      <?php //if looplink exists, looplink 
       $looplink = get_post_meta(get_the_ID(), 'linkki', true); 
       if(! empty($looplink)) :?> <a class="looplink" target="_blank" href="<?php $linkki = get_post_meta($id, 'linkki', true); if(! empty($linkki)) { echo $linkki; } ?>"></a> 
      <?php endif; //end looplink ?> 
      <h3><?php the_title(); ?></h3> 
      <?php if (has_post_thumbnail()) {the_post_thumbnail();} ?> 
      <?php the_content(); ?> 
     </div> 
     <?php endwhile; ?> 
     <?php wp_reset_postdata(); // reset the query ?> 

Я также использую эту петлю, чтобы отобразить то есть виджеты социальных медиа, поэтому они всегда должны быть первые несколько статей (= липким).

Одна идея, которой я не полностью удовлетворен, заключается в том, чтобы не указывать категорию для цикла, а указывать ненужные категории для исключения. Похоже, что Sticky Posts работает по какой-то причине. Есть ли способ сделать эту работу с помощью простой функции без необходимости

query_posts('cat=-1,-2,-3,-4'); 

и т. Д. Для всех петель?

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

ответ

1

Это исключает все липкие сообщения.

query_posts(array('post__not_in' => get_option('sticky_posts'))); 

Чтобы включить липкие сообщения:

$args = array(
    'posts_per_page' => 1, 
    'post__in' => get_option('sticky_posts'), 
    'ignore_sticky_posts' => 1 
); 
query_posts($args); 

ignore_sticky_posts: игнорировать липкие сообщения или нет (доступно с версии 3.1, заменить параметр caller_get_posts). Значение по умолчанию равно 0 - не игнорируйте липкие сообщения. Примечание: игнорировать/исключать липкие сообщения, включенные в начале возвращенных сообщений, но липкий пост все равно будет возвращен в естественном порядке этого списка возвращенных сообщений.

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