2011-02-14 2 views
0

Какое лучшее решение, когда у нас есть несколько циклов на одной странице? Я использую для основного цикла это:Wordpress Multiple Loop

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

<?php endwhile; endif; ?> 

Теперь я пытаюсь добавить новый цикл в одной и той же странице (в другом месте) для признакам должностей в конкретное название категории, которая является для вас лучшим выбор: («контент», например, только)

1- Использовать get_posts();

<?php global $post; 
$args = array('category_name' => 'destaques'); 
$myposts = get_posts($args); 
foreach($myposts as $post) : setup_postdata($post); ?> 

    "content" 

<?php endforeach; ?> 

2- Использовать WP_Query();

<php $my_query = new WP_Query("category_name=destaques"); 
while ($my_query->have_posts()) : $my_query->the_post(); ?> 

    "content" 

<?php endwhile; ?> 

3: Использовать query_posts();

<?php query_posts('category_name=destaques'); 
if (have_posts()) : while (have_posts()) : the_post(); ?> 

    "content" 

<?php endwhile; endif; ?> 

Что вы выбираете и почему?

Спасибо.

ответ

3

Оптимальный выбор get_posts();

Вот рассуждение из Wordpress Function Reference for query posts: функция

В query_posts() предназначен , которые будут использоваться для модификации основной страницы только петли. Он не предназначен как средство для создания вторичных петель на странице . Если вы хотите создать отдельные Петли за пределами основного, вы должны использовать get_posts() вместо . Использование query_posts() на петлях, отличных от , может привести к тому, что ваш основной цикл станет неправильным и, возможно, , отображая то, что вы не были ожидающих.

Функция query_posts() переопределяет и заменяет основной запрос для страницы . Чтобы сохранить ваше здравомыслие, не используйте для любых других целей.

Функция query_posts() создает объект WP12Query и назначает глобальную переменную wp_query . Функция get_posts() создает новый объект WP12Query без переопределения что-нибудь в глобальной области.

+0

Справа. Но я все еще задаюсь вопросом о различии между использованием get_posts и WP_Query. – achairapart

+0

get_posts() создает новую wp_query, не переопределяя глобальные переменные .... Это может предоставить некоторую дополнительную информацию: http: // codex.wordpress.org/Function_Reference/WP_Query#Interacting_with_WP_Query – Kory

+0

Привет, Кори, спасибо за подсказку, я обнаружил, что для разбивки на страницы я могу работать только с query_posts(); но только если я объявляю глобальную переменную $ wp_query. Я буду тестировать с помощью get_posts(), чтобы узнать, получил ли я тот же результат, еще раз спасибо. – Mambley

0

Я не уверен, о других, но мой выбор чаще всего или не

<?php 
query_posts('showposts=1&cat=-48'); // our custom query 
if (have_posts()) : while (have_posts()) : the_post(); // Start the loop 
    $img = get_post_meta($post->ID, "postimage", $single = true);//any custom fields? 
?> 
    <a href="<?php the_permalink() ?>" title="Permanent Link to <?php the_title(); ?>"> 
     <img src="<?php echo $img; ?>" alt="<?php the_title(); ?>" /> 
    </a> 
<?php 
endwhile; endif;// End the Loop and Check for Posts 
wp_reset_query(); // Reset the loop 
?> 
<div>stuff</div> 
<?php 
query_posts('showposts=5&cat=5'); // our custom query 
if (have_posts()) : while (have_posts()) : the_post(); // Start the loop 
    $img = get_post_meta($post->ID, "postimage", $single = true);//any custom fields? 
?> 
    <h2>Title</h2> 
    etc..etc.. 
<?php 
endwhile; endif;// End the Loop and Check for Posts 
wp_reset_query(); // Reset the loop 
?> 

это доказывает, что работает отлично для моих потребностей ...

+0

Привет, Марти, извините за задержку, я также предпочитаю этот подход, но у меня возникают проблемы с разбиением на страницы, у вас есть проблемы с этим? Еще раз спасибо. – Mambley

0

Я бы использовал номер 3. Легче читать и понимать.

+0

Это действительно комментарий, а не ответ на вопрос. Пожалуйста, используйте «добавить комментарий», чтобы оставить отзыв для автора. – Thor

+0

Я понимаю это в ретроспективе. – jocap