get_posts() — позволяет получить массив из объектов постов, соответствующих заданным параметрам

Функция возвращает массив, содержащий объекты постов (записей, страниц, вложений, произвольных типов постов или всё сразу), соответствующие заданным параметрам. Прежде всего хочу сказать — если вам нужно вывести посты, то рассмотрите использование WP_Query для этих целей.

get_posts( $args )

Имеет следующие значения параметров по умолчанию:

$params = array(
	'post_type' => 'post', // тип постов - записи
	'numberposts' => 5, // получить 5 постов, можно также использовать posts_per_page
	'orderby' => 'date', // сортировать по дате
	'order' => 'DESC', // по убыванию (сначала - свежие посты)
	'suppress_filters' => true // 'posts_*' и 'comment_feed_*' фильтры игнорируются
);

Соответствия параметров get_posts() и WP_Query

Любой из параметров WP_Query прекрасно подойдет и для get_posts(). Кроме того, функция имеет несколько эквивалентных параметров:

Параметр get_posts() Его эквивалент в WP_Query
numberposts posts_per_page
category cat
include post__in
Также устанавливает значение posts_per_page равным количеству перечисленных постов.
exclude post__not_in

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

Примеры использования get_posts()

Для начала самый простой пример — выведем ссылки на 5 последних опубликованных постов на блоге. Для получения URL постов нам также потребуется функция get_permalink().

$recent_posts_array = get_posts(); // получаем массив постов
foreach( $recent_posts_array as $recent_post_single ) : // для каждого поста из массива
	echo '<a href="' . get_permalink( $recent_post_single ) . '">' . $recent_post_single->post_title . '</a>'; // выводим ссылку
endforeach; // конец цикла

Аналогичный пример, но с использованием функция the_permalink() (для вывода урл) и the_title() (для вывода заголовков).

<?php
$params = array(
	'posts_per_page' => 5 // этот параметр не обязателен, так как get_posts() по умолчанию и так выводит 5 постов
);
$recent_posts_array = get_posts( $params );
foreach( $recent_posts_array as $recent_post_single ) :
	setup_postdata( $recent_post_single ); // устанавливает $post (глобальная переменная - объект поста)
	?><a href="<?php the_permalink() /* URL записи */ ?>"><?php the_title() /* выводим заголовок */ ?></a><?php
endforeach;
wp_reset_postdata(); // сбрасывает $post

Больше примеров смотрите здесь.

Комментарии 6

  • VRS10 ноября 2015 в 06:11 #

    Доброй ночи, Миша.
    Можешь ли помочь разобраться с get_posts?

    Использую его при изменении галереи.

    add_filter('post_gallery', 'my_post_gallery', 10, 3);
     
    function my_post_gallery($output, $attr, $instance) {
     
    global $post;
     
        if (isset($attr['orderby'])) {
            $attr['orderby'] = sanitize_sql_orderby($attr['orderby']);
            if (!$attr['orderby'])
                unset($attr['orderby']);
        }
     
        extract(shortcode_atts(array(
            'order' => 'ASC',
            'orderby' => 'menu_order ID',
            'id' => $post ? $post->ID : 0,
            'itemtag' => 'dl',
            'icontag' => 'dt',
            'captiontag' => 'dd',
            'columns' => 3,
            'size' => 'thumbnail',
     
            'include' => '',
            'exclude' => ''
     
        ), $attr));
     
        $id = intval($id);
        if ('RAND' == $order) $orderby = 'none';
     
        if (!empty($include)) {
            $include = preg_replace('/[^0-9,]+/', '', $include);
            $_attachments = get_posts(array('include' => $include, 'post_status' => 'inherit', 'post_type' => 'attachment', 'post_mime_type' => 'image', 'order' => $order, 'orderby' => $orderby, 'field' => 'id'));
     
    		$title = trim(strip_tags( $post->title ));
     
            $attachments = array();
             foreach ($_attachments as $key => $val) { 
                $attachments[$val->ID] = $_attachments[$key];
            } 
     
     
        }
        if (empty($attachments)) return '';
     
     
            $output = "<div id=\"gallery-$instance\" class=\"gallery  gallery-$size\" >\n";
     
    		$container_id = get_post_thumbnail_id();		
     
    		$container = wp_get_attachment_image_src( $container_id, 'thumbnail' );
    		$container_full = wp_get_attachment_image_src( $container_id, 'full' );
     
    		$thumbnail_image = get_posts(array('p' => $container_id, 'post_type' => 'attachment', 'field' => 'id'));		
    		$caption = trim(strip_tags( $thumbnail_image[0]->caption ));
    		$gallery_price = '';
    		$gallery_price = get_post_meta($post->ID, 'gallery', true);
    		print $post->ID;
     
    		$prev_img = '';
    		$dop_class = ' col-md-4 col-sm-6 col-xs-12'	;
     
    		if (has_shortcode($gallery_price, 'gallery') and is_front_page()) {
     
    		$output .= "<div class=\"gallery_container\">\n";		
    		$output .= "<a class=\"my-foto-container-a\" href=\"{$container_full[0]}\"  title=\"$title $caption\">";
    		$output .= "<img src=\"{$container[0]}\" width=\"{$container[1]}\" height=\"{$container[2]}\" alt=\"$title $caption\" class=\"my-foto-container  for-all-image trumb-category\"/>\n";
     
    		$output .=  "</a>\n";
            $output .= "</div>\n";
     
    		}
    		else {
     
    		$prev_img = "<li class=\"gallery-item$dop_class\">\n";
    		$prev_img .= "<a href=\"{$container_full[0]}\" title=\"{$title}\" class=\"my-foto-a\" >";
    		$prev_img .= "<img src=\"{$container[0]}\" width=\"150\" height=\"100\" alt=\"{$title}\" class=\"my-foto\"/>";
     
    		$prev_img .= "</a>\n";		  
    		$prev_img .= "</li>\n";
     
    		}
     
     
     
    		$output .= "<ul class=\"trumb_gallery row\">\n";
     
    		$output .= $prev_img;		
     
    		foreach ($attachments as $id => $attachment) {
     
    		  $img = wp_get_attachment_image_src($id, array(150,150));
     
    		  $url_prevu = wp_get_attachment_image_src($id, $size);
    		  $url_big = wp_get_attachment_image_src($id, 'full');
    		  $title = trim(strip_tags( $attachment->post_excerpt ));
    		  $output .= "<li class=\"gallery-item$dop_class\">\n";
    		  $output .= "<a href=\"{$url_big[0]}\" title=\"{$title}\" class=\"my-foto-a\"><img src=\"{$img[0]}\" width=\"{$img[1]}\" height=\"{$img[2]}\" alt=\"{$title}\" data-prevu=\"{$url_prevu[0]}\" data-large=\"{$url_big[0]}\" class=\"my-foto\"/></a>\n";
     
    		  $output .= "</li>\n";
    		}   
     
    		$output .= "</ul>\n";
    		$output .= "</div>\n";       
     
            return $output;    
     
    		wp_reset_postdata();
     
    }

    Почему-то у первой записи срабатывает

     has_shortcode($gallery_price, 'gallery')
    print $post->ID;

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

    Тыщу раз перепроверила wp_reset_postdata(); Он везде стоит где global $post;

    что-то я запуталась (((

    • Миша10 ноября 2015 в 08:11 #

      Привет!
      А можно ли использовать параметр фильтра $attr['id'] для получения ID поста?

      • VRS10 ноября 2015 в 15:11 #
        print $attr['id']

        ничего не выводит

        • Миша11 ноября 2015 в 08:11 #

          Блин, тогда даже хз, это нужно ставить код и разбираться.. А какая задача у кода?

          • VRS11 ноября 2015 в 14:11 #

            Он меняет стандартный вывод галереи. Вписаны классы фрейворка. На главной галереи из произвольного поля отображаются с крупной картинкой и несколькими миниатюрами под ней.
            Вот здесь если открыть первую запись

            http://test.13503.aqq.ru/

            отображается главной картинкой миниатюра 4-го товара, т.к. он опубликован последним.

            • Миша12 ноября 2015 в 08:11 #

              Блин, тут надо ставить этот код и разбираться, сходу трудно сказать. В принципе можешь скинуть мне доступ по емайл - я гляну, как будет время.

Оставить комментарий / вопрос

phpjsHTMLCSSSQLПросто код
  Для того, чтобы оставить комментарий, пожалуйста, зарегистрируйтесь или авторизуйтесь на сайте.
Получайте новости блога по email или следите за мной в социальных сетях.
  • Миша: Да, точно)

  • Владимир: и на третьей строке не хватает скобки ) закрывающей if :)

  • Миша: Добрый вечер! Рекомендую получить ID пользователя через функцию get_current_user_id().

  • Дмитрий: Миша, подскажите пожалуйста, я использую такой редирект, но он не срабатывает: add_action( 'template_redirect', funct...

  • Миша: Ну как не определена - это аргумент функции. Или я просто вас не до конца понимаю.