WordPress как на ладони
Недорогой хостинг для сайтов на WordPress: wordpress.jino.ru

get_posts() WP 1.2.1

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

Это обертка класса WP_Query, т.е. функция понимает все параметры WP_Query.

У get_posts() есть предустановленные параметры. Их иногда нужно изменить, чтобы они не мешали получить нужный результат:

  • post_type = post - если мы указываем вывод таксономии для типа записи отличного от post, то параметр post_type нужно изменить - он по умолчанию равен post.
  • numberposts = 5 - если мы забудем изменить параметр numberposts, то долго можем недоумевать почему выводится только 5 записей вместо нужных 20.
  • suppress_filters = true — этот параметр отключает работу некоторых фильтров (хуков). Читать подробнее.

get_posts() - это аналог query_posts(). Отличается тем, что get_posts() не вмешивается в глобальный запрос WP, а создает отдельный экземпляр класса WP_Query.

Является основой для: wp_playlist_shortcode(), get_children(), wp_get_recent_posts()
Работает на основе: WP_Query()
✈ 1 раз = 0.0036с = очень медленно | 50000 раз = 99.1с = очень медленно

Хуков нет.

Возвращает

WP_Post[]/[].

  • Пустой массив, если не удалось получить записи.

  • Массив WP_Post объектов (записей). Каждый объект в массиве выглядит так:

    array(
    	[0]=> object(WP_Post)#4692 (24) {
    		["ID"]                    => int(822)
    		["post_author"]           => string(1) "1"
    		["post_date"]             => string(19) "2016-07-07 10:28:57"
    		["post_date_gmt"]         => string(19) "2016-07-07 07:28:57"
    		["post_content"]          => string(6225) "Контент статьи"
    		["post_title"]            => string(37) "Мертвое море (14 фото)"
    		["post_excerpt"]          => string(15) "Цитата о статье"
    		["post_status"]           => string(7) "publish"
    		["comment_status"]        => string(4) "open"
    		["ping_status"]           => string(4) "open"
    		["post_password"]         => string(0) ""
    		["post_name"]             => string(95) "mertvoe-more-14-foto"
    		["to_ping"]               => string(0) ""
    		["pinged"]                => string(0) ""
    		["post_modified"]         => string(19) "2016-07-07 10:28:57"
    		["post_modified_gmt"]     => string(19) "2016-07-07 07:28:57"
    		["post_content_filtered"] => string(0) ""
    		["post_parent"]           => int(0)
    		["guid"]                  => string(0) ""
    		["menu_order"]            => int(0)
    		["post_type"]             => string(4) "post"
    		["post_mime_type"]        => string(0) ""
    		["comment_count"]         => string(1) "0"
    		["filter"]                => string(3) "raw" 
    	}
    	[1] => object(WP_Post){
    		...
    	}
    	[2] => object(WP_Post){
    		...
    	}
    )

Использование

get_posts( $args );

Шаблон использования

// параметры по умолчанию
$posts = get_posts( array(
	'numberposts' => 5,
	'category'    => 0,
	'orderby'     => 'date',
	'order'       => 'DESC',
	'include'     => array(),
	'exclude'     => array(),
	'meta_key'    => '',
	'meta_value'  =>'',
	'post_type'   => 'post',
	'suppress_filters' => true, // подавление работы фильтров изменения SQL запроса
) );

foreach( $posts as $post ){
	setup_postdata($post);
    // формат вывода the_title() ...
}

wp_reset_postdata(); // сброс
$args(строка/массив)
Список аргументов, в соответствии с которыми будет получен результат.
По умолчанию: предустановленные

Аргументы параметра $args

С версии WordPress 2.6, в дополнении к нижеописанным параметрам, get_posts() может принимать все те же параметры что и WP_Query.

В get_posts() по умолчанию включен параметр suppress_filters (подавлять фильтры), который в query_posts() и WP_Query отключен - т.е. там фильтры работают. Включение suppress_filters отменяет все фильтры изменения SQL запроса, следующего типа: posts_* или comment_feed_*.

suppress_filters не виляет на работу фильтра pre_get_posts - он будет работать независимо от того что указано в suppress_filters.

Такое отключение фильтров по умолчанию, может ввести в замешательство, если есть плагины влияющие на вывод записей, через фильтры SQL запроса, например WPML. В таких случаях suppress_filters нужно отключить.

В параметр 'category' нужно передавать ID, а не название категории. Также 'category' можно передать строку: ID через запятую.

numberposts(число)
Количество выводимых постов. Установить на 0, чтобы ограничить вывод максимальным числом постов на страницу (устанавливается в настройках ВП) или поставить -1 чтобы убрать ограничения вывода (LIMIT).
По умолчанию: 5
offset(число)
Отступ от первого поста (записи).
category(число/строка/массив)

Из каких категорий выводить записи. Укажите ID категории из которой нужно получить посты или укажите, -3 вместо 3, если нужно получить все записи, кроме записей из категории 3 (исключить категорию). Можно указать несколько ID через запятую ("3,5,12" или "-3,-5,-12").

Смотрите описание параметра cat у WP_Query.

По умолчанию: 0

category_name(строка)
Показывать посты только из этой категории (указывается название или альтернативное имя(slug) категории).
По умолчанию: нет
tag(строка)
Получить записи имеющие указанные в этом параметре метки. Нужно указывать альтернативное имя (slug) метки. Если указать несколько имен (меток) через запятую, то будут получены записи соответствующие любой метке, а если разделить пробелами, то будут получены записи имеющие все указанные метки.
По умолчанию: нет
include(строка/число/массив)

ID постов, которые нужно получить. Если указывается строка, то ID нужно разделять запятыми или пробелами. Пример, получит 6 постов: '45,63,78,94,128,140'.

Важно: Указав этот параметр, бессмысленно указывать параметры posts_per_page, offset, category, exclude, meta_key, meta_value и post_parent.
По умолчанию: нет

exclude(строка/число)
ID постов которые нужно исключить из выборки, указывать через запятую или пробел.
По умолчанию: нет
meta_key и meta_value(строка)

Получить посты имеющие указанное произвольное поле (meta_key) со значением (meta_value).

Можно указать meta_key и meta_value, тогда будут получены посты, у которых есть указанное метаполе и значение которого равно указанному значение.

Или можно указать только meta_key, тогда будут получены все записи у которых это метаполе есть и не важно какое там значение.

По умолчанию: нет

meta_query(массив)
Выборка записей по произвольным полям. Подробнее см. в описании WP_Query (meta_query).
По умолчанию: нет
date_query(массив)
Выборка записей по датам. Подробнее см. в описании WP_Query (date_query).
По умолчанию: нет
post_type(строка/массив)

Какого типа посты нужно получать, может быть:

  • any - все типы, кроме revision и типов у которых указан параметр exclude_from_search=true.
  • attachment - прикрепленные записи.

    по умолчанию WP_Query ставит статус 'post_status'=>'publish', а вложения имеют статус 'post_status'=>'inherit', поэтому чтобы вывести вложения нужно еще изменить параметр post_status на 'inherit' или 'any'.

  • page - постоянные страницы
  • post - посты
  • revision - ревизии
  • custom_type - название (ярлык) произвольного типа записи
  • array('post','page') - сразу несколько типов в массиве.

По умолчанию: 'post'

меню
post_mime_type(строка/массив)

Какого типа вложения нужно получить. Можно использовать, когда параметр post_type = attachment.

  • image/jpeg
  • image/png
  • image/gif
  • image - для любых картинок
  • audio/mpeg
  • application/pdf
  • application/zip

Вместо одно миме типа можно указать несколько в массиве. Полный список миме типов смотрите здесь.

По умолчанию: нет

post_status(строка)

Статус записи. Можно передать несколько статусов через запятую. Может принимать:

  • publish - опубликовано
  • private - личная запись
  • draft - черновик
  • future - запланировано
  • pending- на модерации
  • inherit - вложение, любое вложение получает этот статус. Ставиться автоматически, при $post_type='attachment'
  • any - все статусы

По умолчанию: publish

post_parent(число)
Показать только дочерние записи к указанному ID.
По умолчанию: нет
nopaging(логический)
Включить или отключить пагинацию, если стоит true параметр $numberposts игнорируется.
По умолчанию: false
orderby(строка)

Сортировать результат по указанным полям. Можно указывать несколько полей сортировки, через пробел. Допустимые поля:

  • author - сортировать по ID авторов.
  • content - сортировать по контенту.
  • date - сортировать по дате создания записи.
  • ID - сортировать по ID записи. Указываются ID в массиве или через запятую.
  • menu_order - сортировать по полю menu_order. Используется для постоянных страниц и вложений (картинки, файлы и т.п.).
  • mime_type - сортировать по MIME типу. Используется для вложений.
  • modified - сортировать по дате изменения.
  • name - сортировать по альтернативному имени (slug).
  • rand - случайная сортировка. Создает повышенную нагрузку на БД.
  • status - сортировать по статусу (черновик, опубликовано и т.п.)
  • title - сортировать по названию.
  • parent - сортировать по ID родителя (parent ID).
  • password - сортировать по паролю.
  • type - сортировать по типу (пост, страница и т.д. ).
  • comment_count - по количеству комментариев.
  • meta_value - по значению указанного произвольного поля.
  • post__in - учитывает порядок указанных ID в параметре include.

Префикс post_ у полей таблицы опускается для удобства. Например вместо date можно написать post_date, вместо content post_content и т.д.

По умолчанию: 'date'

меню
order(строка)
В каком направлении упорядочить, указанное в параметре $orderby, поле:
ASC - по порядку (от меньшего к большему: а,б,в).
DESC - в обратном порядке (от большего к меньшему: в,б,а).
По умолчанию: 'DESC'
suppress_filters(true/false)

Включение этого параметра отменяет/пропускает все фильтры изменение SQL запроса, такого типа posts_* или comment_feed_*. На работу фильтра pre_get_posts этот параметр не виляет - он будет работать независимо от того что указано в этом параметре. Какие именно фильтры отключаются смотрите здесь.

В функциях WP_Query и query_posts() этот параметр отключен по умолчанию (равен false).
По умолчанию: true

Примеры

#1. Вывод постов с отступом

Если у вас на главной выводится один, последний пост, а нужно вывести еще 5 предыдущих из категории 1, то можно использовать такой код:

<ul>
<?php
global $post;
$args = array( 'posts_per_page' => 5, 'offset'=> 1, 'category' => 1 );
$myposts = get_posts( $args );
foreach( $myposts as $post ){ setup_postdata($post);
	?>
	<li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
	<?php
}
wp_reset_postdata();
?>
</ul>

#2. Вывод постов с отступом, без нарушения основного цикла.

Если была использована функция get_posts() и после нее нужно использовать стандартный цикл WordPress, то нужно сохранить глобальную переменную $post, делает это так:

<ul>
<?php
global $post;

// записываем $post во временную переменную $tmp_post
$tmp_post = $post;
$args = array( 'posts_per_page' => 5, 'offset'=> 1, 'category' => 1 );
$myposts = get_posts( $args );
foreach( $myposts as $post ){ setup_postdata($post);
	?>
	<li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
	<?php
} 

// возвращаем былое значение $post
$post = $tmp_post;
?>
</ul>

#3. Возможность использовать специальные функции Цикла ВП

Стандартно в цикле основанном на get_posts() невозможно использовать, например, функцию the_content() или the_date(). Эта проблема решается функцией setup_postdata() которой нужно передать переменную $post:

<?php
$args = array( 'posts_per_page' => 3 );
$lastposts = get_posts( $args );

foreach( $lastposts as $post ){
	setup_postdata($post); // устанавливаем данные
	?>

	<h2><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2>
	<?php the_content(); ?>

	<?php
}
wp_reset_postdata(); // сброс
?>

Данные можно также получить через обращение к свойству объекта (объект->свойство_объекта). Например, для этого примера $post->ID будет равно ID поста, $post->post_content будет содержать контент записи. Свойство объекта это колонка таблицы БД posts. Название колонок можно посмотреть тут.

Не забывайте, что на экран данные выводятся через php оператор echo:

<?php echo $post->ID; ?>

#4. Последние посты отсортированные по заголовку

Получим последние посты отсортированные по заголовку в алфавитном порядке. Следующий пример выведет дату, заголовок и цитату поста:

<?php
global $post;
$postslist = get_posts( array( 'posts_per_page' => 10, 'order'=> 'ASC', 'orderby' => 'title' ) );
foreach ( $postslist as $post ){
	setup_postdata($post);
	?>
	<div>
		<?php the_date(); ?>
		<br />
		<?php the_title(); ?>
		<?php the_excerpt(); ?>
	   </div>
	<?php
}
wp_reset_postdata();

#5. Случайные посты

Получим 5 случайных постов, реализуется за счет параметра 'orderby' => 'rand':

<ul>
<?php
$args = array( 'posts_per_page' => 5, 'orderby' => 'rand' );
$rand_posts = get_posts( $args );
foreach( $rand_posts as $post ) : ?>
	<li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
<?php endforeach; ?>
<?php wp_reset_postdata() ?>
</ul>

#6. Получить все прикрепленные файлы

Используется за пределами Цикла WordPress. Следующий код выведет заголовок, ссылку и цитату прикрепленного файла:

<?php
$args = array( 'post_type' => 'attachment', 'posts_per_page' => -1, 'post_status' => null, 'post_parent' => null );
$attachments = get_posts( $args );
if ($attachments) {
	foreach ( $attachments as $post ) { setup_postdata($post);
		the_title();
		the_attachment_link($post->ID, false);
		the_excerpt();
	}
}
wp_reset_postdata();
?>

#7. Прикрепленные файлы определенного поста

Код нужно использовать внутри Цикла WordPress, где переменная $post->ID:

<?php
$args = array( 'post_type' => 'attachment', 'posts_per_page' => -1, 'post_status' => null, 'post_parent' => $post->ID );
$attachments = get_posts($args);
if ($attachments) {
	foreach ( $attachments as $attachment ) {
		echo apply_filters( 'the_title' , $attachment->post_title );
		the_attachment_link( $attachment->ID , false );
	}
}
wp_reset_postdata();
?>

#8. Последние записи из той же рубрики

Выведем список последних записей текущей рубрики, в которой находится запись. При этом исключим текущую запись:

<?php 
$category = get_the_category();
rsort($category);
$cat_add_id = $category[0]->term_id;
$real_id = get_the_ID();                

$args = array('cat' =>$cat_add_id);
$posts = get_posts($args);

foreach( $posts as $post ){
	setup_postdata($post);
	if ($post->ID <> $real_id){
	?>
	<a href="<?php the_permalink(); ?>"><?php the_title(); ?></a> <?php
	}
}
wp_reset_postdata();
?>

Другая версия этого кода в комментариях.

Заметки

  • С версии 2.6 изменен ряд передаваемых значений у параметра orderby - префикс post_ был удален, например, было post_title, стало просто title.

  • С версии 3.0 параметрам include и exclude можно передавать и массивы ID.

Хотите дешево купить просмотры в Инстаграме на видео или ТВ-трансляцию, но не знаете, где? Попробуйте посетить сайт Doctor SMM, где Вам будет предложена одна из самых низких цен по рунету на просмотры. Торопитесь, так как предложение действует ограниченное время! К тому же здесь Вы сможете очень быстро приобрести ресурс с оптимальным, конкретно для Вашей страницы, скоростным режимом. Развивайте аккаунт быстро и легко!

Заметки

  • Смотрите: WP_Query::parse_query()

Список изменений

С версии 1.2.0 Введена.

Код get posts: wp-includes/post.php WP 5.2.4

<?php
function get_posts( $args = null ) {
	$defaults = array(
		'numberposts'      => 5,
		'category'         => 0,
		'orderby'          => 'date',
		'order'            => 'DESC',
		'include'          => array(),
		'exclude'          => array(),
		'meta_key'         => '',
		'meta_value'       => '',
		'post_type'        => 'post',
		'suppress_filters' => true,
	);

	$r = wp_parse_args( $args, $defaults );
	if ( empty( $r['post_status'] ) ) {
		$r['post_status'] = ( 'attachment' == $r['post_type'] ) ? 'inherit' : 'publish';
	}
	if ( ! empty( $r['numberposts'] ) && empty( $r['posts_per_page'] ) ) {
		$r['posts_per_page'] = $r['numberposts'];
	}
	if ( ! empty( $r['category'] ) ) {
		$r['cat'] = $r['category'];
	}
	if ( ! empty( $r['include'] ) ) {
		$incposts            = wp_parse_id_list( $r['include'] );
		$r['posts_per_page'] = count( $incposts );  // only the number of posts included
		$r['post__in']       = $incposts;
	} elseif ( ! empty( $r['exclude'] ) ) {
		$r['post__not_in'] = wp_parse_id_list( $r['exclude'] );
	}

	$r['ignore_sticky_posts'] = true;
	$r['no_found_rows']       = true;

	$get_posts = new WP_Query;
	return $get_posts->query( $r );

}

Cвязанные функции

Из метки: query (запрос)

Еще из раздела: Запросы

134 коммента
Полезные 10 Вопросы 5 Все
  • Дарья brunetlady.ru

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

    Ответить8.7 лет назад #
    • Kama7630

      Это почитайте: http://wp-kama.ru/function/query_posts

      Если вам нужно отсортировать записи по дате по порядку, то вставьте перед Циклом WordPress:

      query_posts($query_string. 'order=ASC');
      Ответить8.7 лет назад #
      • Дарья brunetlady.ru

        аааааа...
        я вставила так, и с DESC пробовала, все равно не получается(
        если не трудно, подскажите пожалуйста куда именно прописать, а то я запуталась(

        <?php get_header(); ?>
        
        	<div id="content">
        
        	<?php query_posts($query_string. 'orderby=ASC'); if (have_posts()) : ?>
        
        		<?php while (have_posts()) : the_post(); ?>
        
        			<div class="post" id="post-<?php the_ID(); ?>">
        				<h2><a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title_attribute(); ?>"><?php the_title(); ?></a></h2>
        				<small><?php the_time('j F, Y') ?></small>
        
        				<div class="entry">
        					<?php the_content('подробнее'); ?>
        				</div>
        Ответить8.7 лет назад #
        • Kama7630

          Вы правильно вставляете, только не orderby=ASC, а order=ASC!

          Если все равно не будет работать попробуйте так:

          <?php query_posts( preg_replace('@order=.*?&?@', '', $query_string). 'order=ASC' ); if (have_posts()) : ?>
          Ответить8.7 лет назад #
          • Дарья brunetlady.ru

            спасибо, но все равно почему то не получается(

            Ответить8.7 лет назад #
  • Awayka awayka.ru

    Здравствуйте! Не могли бы вы мне помочь с выводом списка заголовков постов, отсортированных по названию, выбранных из определенной категории и по определенной метке (тагу). У меня получается по вашему примеру запрос вроде этого:

    <?php $args = array( 'category' => 'reviews', 'tag' => '2010', 'order'=> 'ASC', 'orderby' => 'title' );  
    $postslist = get_posts( $args );  
    foreach ($postslist as $post) :  setup_postdata($post); ?>  
    	<div>  
    		<?php the_title(); ?>  
    	</div>  
    <?php endforeach; ?>

    Если он более или менее верен, то подскажите как мне его использовать? То есть я хочу дать ссылку, вроде "Рецензии 2010" - и чтобы при переходе по ней выводились те самые записи, осортированные и выбранные. Куда мне надо вставить соотв. запрос и прочее? Заранее, благодарю...

    Ответить8.6 лет назад #
    • Kama7630

      Из категории и по метке такой запрос не имеет смысла и будет нерабочим. Статья может относится к метке "2010" и при этом быть в нескольких категориях или наоборот. Так же в параметре 'category' нужно указать ID, а не слаг. А в остальном все вы правильно написали.

      Чтобы вывести ссылки на статьи используйте вариант из примера:

      <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>

      В целом будет как-то так:

      <ul>
      	<?php $args = array( 'numberposts' => -1, 'tag' => '2010', 'order'=> 'ASC', 'orderby' => 'title' );
      	$postslist = get_posts( $args );
      	foreach ($postslist as $post){  setup_postdata($post); ?>
      			<li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
      	<?php } ?> 
      </ul>
      Ответить8.6 лет назад #
      • Awayka awayka.ru

        Большое спасибо! Все получилось :]

        Ответить8.6 лет назад #
  • Руслан

    Привет!у меня к тебе вопрос!?
    как из вывода случайных постов,всех категорий,не выводить один пост?!
    Я пробовал вот так не выходит

    <?php query_posts(array('orderby' => 'rand', 'showposts' => 1,'post_not_in' =>198));
    		if (have_posts()) :
    		while (have_posts()) : the_post(); ?>
    		<a href="<?php the_permalink() ?>;" rel="bookmark" title="<?php the_title(); ?>"><?php the_title(); ?></a>
    		<?php the_excerpt();
    		endwhile;
    		endif; ?>
    		<? wp_reset_query();  ?>

    Подскажи где исправить!!!

    Ответить8.5 лет назад #
    • Kama7630

      Вы не тот мануал читаете! Вам сюда: query_posts. В общем, все правильно, но нужно использовать post__not_in, а не post_not_in sarcastic

      Вообще, судя по коду, это не главный вывод и использовать query_posts() неправильно. query_posts() должен использоваться 1 раз на странице. Аргумент exclude используйте, если используется функция get_posts()!

      Ответить8.5 лет назад #
      • Руслан

        Сори за то что не в тот топик попалsmile
        "post__not_in" он ведь с двойным нижним подчеркиванием и приводит к ошибки(
        а по поповоду query_posts(),Я ведь сбрасываю этот цикл после вывода в нужном месте wp_reset_query(), и так можно использовать query_posts() несколько раз на одной странице!

        Ответить8.5 лет назад #
        • Kama7630

          Это понятно, что несколько раз можно использовать. Но специально для этого существует get_posts() и что-то мне подсказывает что не спроста...

          Ответить8.5 лет назад #
  • Kostromi4

    Подскажи пожалуйста как реализовать такую ситуацию. Нужно на странице архива вывести записи определенной метки и категории, но условие этого вывода мы должны передать с другой страницы.

    Ответить8.4 лет назад #
    • Kama7630

      Передать данные с одной страницы на другую POST или GET запросом, почитайте про это в сети!

      Пример передачи GET запросом, коротко:

      Дописываем в УРЛ запрос: ?data=info&data2=info2:

      http://site.ru/рубрика/название_статьи?data=info&data2=info2

      На странице с такой ссылкой в PHP данные запроса будут в массиве $_GET:
      $_GET['info'] будет равно - info
      $_GET['info2'] будет равно - info2

      Ответить8.4 лет назад #
      • Kostromi4

        это я вкурсе, просто думал есть возможность с одной страницы управлять циклом вп на другой. Быть может объявив получаемый массив глобальной переменной...

        Ответить8.4 лет назад #
        • Kama7630

          Осознайте точно что в итоге вам надо получить и вы поймете, что POST и/или GET запросы — то, что вам нужно!

          Ответить8.4 лет назад #
  • Otshelnik-Fm213 otshelnik-fm.ru

    Странно и почему я query posts использовал везде...

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

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

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

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

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

    Ответить7.8 лет назад #
  • Александр

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

    Ответить7.5 лет назад #
    • Александр

      Разобрался самостоятельно. Почитал статью о циклах на 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, что, вобщем-то, и сделал у себя в блоге.

      1
      Ответить7.5 лет назад #
      • Александр, спасибо за скрипт!
        То, что надо. Чутка допилил для задачи:

        • в каждой рубрике выводить целиком последнюю запись текущей рубрики.

        Я сделал так:

        $cat = get_the_category($post->ID);
        $my_query = new WP_Query('cat=' .  $cat[0]->term_id . '&posts_per_page=1');
        while ($my_query->have_posts()) : $my_query->the_post(); 
        get_template_part( 'template-parts/content', 'single' );
        endwhile;
        • вставил данный код в начало файла archive.php.

        Может кому пригодится.

        Ответить8 мес назад #
  • Werdik

    Добрый день Kama. Есть вопрос, надеюсь на помощь. Много искал, но то ли я дурак, то ли сани не едут.
    В общем, использую на сайте для вывода ссылок на посты категории get_posts. На странице категории и на странице поста.
    Проблема в том что, на странице поста, запись ссылается сама на себя, это как бы не очень хорошо. Может можно её как то исключить из выборки цикла? НУ или по крайней мере выделить активный url.

    $args = array(
    	'numberposts'     => -1,
    	'offset'          => 0,
    	'category'        => '1',
    	'orderby'         => 'post_date',
    	'order'           => 'DESC',
    	'post_type'       => 'post',
    	'post_status'     => 'published'
    );
    
    $posts = get_posts($args);
    foreach($posts as $post){ setup_postdata($post);
    	// формат вывода
    ?>
    <div id="catbar">
    <img class="miniimg"src="<?php echo catch_that_image(); ?>" alt="<?php the_title(); ?>" />
    <div class="bartitle">
    
    <h3><a href="<?php the_permalink() ?>" rel="bookmark"><?php the_title(); ?></a></h3></div></div>
    <?           }
    wp_reset_postdata();

    Пробовал использовать функцию для перелинковки (взятую у тебя), но тогда на странице категории не отображается последняя запись.

    Ответить6.9 лет назад #
  • Паша

    Хочу выводить записи из определенной категории начиная со второй, так как первая выводится выше, не могу придумать как это выполнить...

    Ответить6.8 лет назад #
  • Игорь xoot.ru

    Нужно на главной странице выводить в 4 колонки по 1 посту из разных категорий. оформление разное у каждой колонки. Как такое сделать? Пробовал, только 1 колонка делается, но не 4... Просьба дать код, спасибо.

    Ответить5.3 лет назад #
    • Kama7630

      Если из разных категорий, то вам нужно 4 разных запроса. Все отдельно делать для каждой колонки. Как выводить посты из категории, в примерах к этой статье есть.

      Код примерно такой будет для каждой колонки:

      $posts = get_posts( array('cat' =>$cat_add_id) );
      
      foreach( $posts as $post ){
      	setup_postdata($post);
      	// вывод
      }
      wp_reset_postdata();
      Ответить5.3 лет назад #
  • Ксения

    Спасибо, полезная штука. Код их первого примера заработал с первого раза smile

    Ответить5.1 лет назад #
Здравствуйте, !     Войти . Зарегистрироваться