ГлавнаяФункции WPЗапросы → get_posts
GoGetLinks.net

get_posts с версии 1.2.1

Комментариев: 44get_posts
  • Здравствуйте! Пробую следующий код, но он не работает

    <?php
                                $args = array( 'post_type' => 'attachment', 'orderby' => 'rand', 'category' => 1);
                                $attachments = get_posts( $args );
                             	foreach ( $attachments as $post ) { ?>
    	                    <li><?php the_attachment_link($post->ID, false); ?></li>
                                <?php } ?>

    без 'category' => 1 работает, но выводит все изображения, а нужно только из категории 1.

    Пробовал так же 'category' => -4 (вторая категория, которую нужно исключить) тоже не работает
    'category_name' => 'gallery' тоже не хочет работать, грешу на 'post_type' => 'attachment', может из за этого условия...

    Если знаете, подскажите как ограничить по категории. Спасибо.

    ОТВЕТИТЬ ↓
    • Готовый ответ я не подскажу, но ошибка в том что вложение не может относится к категории, а относится к посту. Т.е. вам нужно сначала получить все посты из нужной категории, а потом получить все вложения (attachment) этих постов.

      Мельком пробежался по мануалу параметров query_posts(), мне кажется сделать такое, стандартными средствами ВП не получится.

      Попробуйте получить ID всех постов из категории, собрать их в массив, а затем в вашем примере вместо 'category' => 1 вписать 'post_parent' => массив_из_ID_постов. Но для начала проверьте понимает ли вообще параметр post_parent несколько ID, судя по мануалу ему можно передать только 1 ID.

      ОТВЕТИТЬ ↓
      • вышел из положения исключением нескольких attachment_id
        array(1,2) пригодилось, т.к. просто 'exclude' => 1,2 не сработало

        ОТВЕТИТЬ ↓
  • а как вывести название подкатегории, а под ней список названий постов, которые она содержит?
    это можно сделать через get_post?
    только нужно немного хитро..
    всего имеется несколько подкатегорий, и, может можно, не вставлять каждую из них вручную (category=...), а чтобы сразу выводился список из всех.. (т.к. будут появляться новые подкатегории)

    не уверена, что получилось вразумительно рассказать, но если вдруг подскажете - буду мегаблагодарна smile

    ОТВЕТИТЬ ↓
  • Добрый день.

    Возник вопрос.
    Параметры get_posts у меня такие:

    $args = array('numberposts' => 5, 'include' => '1,2,3,4,5', 'post_type'=>'any', 'order'=>'ASC');

    Не подскажите, как можно заставить get_posts выводить записи в порядке их перечисления в пункте include.
    А то вариантов orderby море, но такого, казалось бы, очевидного и нет. Есть ли возможность это как-то исправить?
    Спасибо!

    ОТВЕТИТЬ ↓
    • Вроде штатными методами такое не получиться. Можно пробовать после получения данных отсортировать их в нужном порядке, как-то так.

      ОТВЕТИТЬ ↓
  • В интернетах пишут, что задача это известная и нетривиальная. И вроде как решали люди ее вообще не через get_posts. Но мне хотелось бы именно с помощью этой функции, так как я ее везде использую

    ОТВЕТИТЬ ↓
  • Странно и почему я query posts использовал везде...

    Благодаря развернутой статье тут и на этой странице, я исправил все ошибки. Хочу поделиться результатам - до этого было 102 запроса к бд с главной страницы. сейчас 56! и уменьшилось время на генерацию страницы с 2.2 секунд до 1.4 секунды. и выиграл 200 килобайт оперативы (сейчас 19.9мб)

    Очень порадовало что есть возможность в get posts использовать выборку по произвольным полям. Кама - ваш блог уже в сотый раз меня выручил

    Небольшой вопрос:
    заключать в '' обязательно?

    $args = array( 'posts_per_page' => 10, 'tag' => 'trejler' );  

    то-есть как я делаю - это верно? тут количество на страницу без этого символа, а слаг тэга в нём ( и подскажите как называется этот символ ', чувствую себя деревней smile вроде не апостроф, и не кавычка... )

    ОТВЕТИТЬ ↓
  • Это тут не описано: 'orderby' => 'meta_value' делает сортировку по значению произвольного поля (проверил на вп 3.2.1). meta_value_num возможно тогда тоже будет работать - проверить не могу.

    ОТВЕТИТЬ ↓
    • Тут в начале отсылка на параметры query_posts() - они одинаковые с get_posts(). Там все это описано подробно. Здесь дублировать не хочу, лень *sorry* Ту статью надо обновить уже возможно, кодекс периодически обновляется.

      ОТВЕТИТЬ ↓
      • а по поводу вопроса в 15 комментарии? *blush*

        ОТВЕТИТЬ ↓
  • Надо бы еще добавить meta_query(array) для возможности выборки несколько значений одной функцией, стандартными средствами, а то долго искал, все предлпгпют вытащить все, что можно, а потом разгребать по одному.
    подробнее - в кодексе http://codex.wordpress.org/Class_Reference/WP_Query#Custom_Field_Parameters

    ОТВЕТИТЬ ↓
    • В этом комментарии уже отвечал на подобный вопрос.

      ОТВЕТИТЬ ↓
  • Вот код, который выводит список ВСЕХ постов во ВСЕХ категориях:

    <?php
    $categories = get_categories();
    foreach ( (array) $categories as $category ) :
        $posts = get_posts('cat=' . $category->term_id);
    ?>
    <h3><?php echo $category->name; ?></h3>
    <ul>
    	<?php foreach ( (array) $posts as $post ) : ?>
            <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
        <?php endforeach; ?>
    </ul>
    <?php
    endforeach;
    ?>

    Подскажите пожалуйста, как исключить из этого списка некоторые категории, чтобы выводились не все категории, а только заданные и к ним посты.
    Измучелась совсем, ничего не получается. Помогите, плиззз!!!

    ОТВЕТИТЬ ↓
  • Сделал вывод записей на подобие примера 1. Но проблема появилась: если в рубрике всего лишь одна запись, то ничего не выводится, а если 2 и более, то выводятся все, кроме первой. Что с этим можно сделать?

    ОТВЕТИТЬ ↓
    • Разобрался самостоятельно. Почитал статью о циклах на wp.org и нашёл полезный код:

      <?php $my_query = new WP_Query('cat=2&posts_per_page=10'); ?>
      
      <?php while ($my_query->have_posts()) : $my_query->the_post(); ?>
        <!-- получить записи из рубрики special_cat... -->
      <?php endwhile; ?>
      

      Думаю, лучше использовать его, а не цикл foreach, что, вобщем-то, и сделал у себя в блоге.

      ОТВЕТИТЬ ↓
  • А можно ли сделать выборку по ОТСУТСТВИЮ произвольного поля с данным именем? Что-то я как ни пыталась, у меня не вышло.

    ОТВЕТИТЬ ↓
Форма комментирования

¤ Вставляйте код кнопкой: "Код" (php, js, html, css, sql);
¤ Выделяйте HTML код кнопкой: "Выделить" (<div>);
¤ Перед отправкой комментария используйте "Превью";
¤ Не пишите спам/бред — бесполезно!

Подписаться на комментарии без комментирования:

X

Забыли пароль?