Функция get_posts() и её полезное применение на блоге WordPress

функция get_post()

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

Применяется функция get_posts() для получения и вывода любых записей или страниц по заданным критериям:

$posts = get_posts( array(
'numberposts' => 5, // тоже самое что posts_per_page
'offset' => 0,
'category' => '',
'orderby' => 'post_date',
'order' => 'DESC',
'include' => '',
'exclude' => '',
'meta_key' => '',
'meta_value' => '',
'post_type' => 'post',
'post_mime_type' => '', // image, video, video/mp4
'post_parent' => '',
'post_status' => 'publish'
) );

Где:

  • numberposts (числовое значение) — количество выводимых постов (чаще всего устанавливается в настройках раздел «Чтение»).
  • offset (числовое значение) — отступ от первой записи или страницы.
  • category (строчное и числовое значение) — выбор или исключение рубрик, к которым принадлежать записи. Положительное значение добавит рубрику, отрицательное — исключит. Количество рубрик указывается через запятую.
  • category_name (строчное значение) — показывает записи только из данной категории.
  • tag (строчное значение) — получаем записи с указанными метками.
  • include (строчное, числовое значение или массив) — выводит записи по ID.
  • exclude — (строчное или числовое значение) — исключает записи по ID.
  • meta_key и meta_value (строчное значение) — получает посты с указанием произвольных полей.
  • post_type (строчное значение) — выводит определенный тип поста или массив с указанием через запятую:
    1. attachment — прикрепленные вложения,
    2. page — страницы,
    3. post — записи,
    4. array (‘post’ , ‘page’).
  • post_mime_type (строчное значение) — указывает тип прикрепления, используется с параметром post_type.
    1. image/jpeg
    2. image/png
    3. image/gif
    4. image — для любых картинок
    5. audio/mpeg
    6. application/pdf
    7. application/zip
  • post_status (строчное значение) — передает статус записи:
    1. publish — опубликовано
    2. private — личная запись
    3. draft — черновик
    4. future — запланировано
    5. inherit — вложение, любое вложение получает этот статус.
    6. any — все статусы.
  • post_parent (числовое значение) — выводить только дочерние страницы к указанному ID.
  • nopaging (логическое значение) — по умолчанию отключено. Включает или отключает пагинацию.
  • orderby (строчное название) — сортировка результата по заданным полям:
    1. author — вывод записей автора (указывается ID).
    2. content — сортировать по контенту.
    3. date — фильтрация по дате создания записи.
    4. ID — сортировать по ID записи. Указываются ID в массиве или через запятую.
    5. menu_order — сортировать по полю menu_order. Используется для постоянных страниц и вложений (картинки, файлы и т.п.).
    6. mime_type — сортировать по MIME типу. Используется для вложений.
    7. modified — сортировать по дате изменения.
    8. name — сортировать по альтернативному имени (slug).
    9. rand — случайная сортировка. Создает повышенную нагрузку на БД.
    10. status — сортировать по статусу (черновик, опубликовано и т.п.)
    11. title — сортировать по названию.
    12. parent — сортировать по ID родителя (parent ID).
    13. password — сортировать по паролю.
    14. type — сортировать по типу (пост, страница и т.д. ).
    15. comment_count — по количеству комментариев.
    16. meta_value — по значению указанного произвольного поля.
    17. post__in — учитывает порядок указанных ID в параметре include.
  • order (строчное значение) — порядок вывода значения $orderby:
    1. ASC — прямой порядок,
    2. DESC — обратный порядок сортировки.

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

Создание карты сайта с помощью функции get_posts()

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

Шаблон функции, которую вы можете изменять по собственному желанию:

<ul>
<?php
global $post;
$args = array('posts_per_page' => -1, 'post_type' => array('post','page'), 'offset'=> 1, 'order'=> 'ASC' );
$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>

Данный код выведет абсолютно все страницы и записи вашего блога в алфавитном порядке. С помощью аргумента exclude исключим закрытые для индексации и технические страницы, такие как поиск или пользовательское соглашение на моём блоге:

<ul>
<?php
global $post;
$args = array('posts_per_page' => -1, 'exclude' => array(221,1213), 'post_type' => array('post','page'), 'offset'=> 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>

Комбинируем посты по рубрикам:

Рубрика ID 11
<ul>
<?php
global $post;
$args = array( 'posts_per_page' => -1, 'offset'=> 1, 'category' => 11 );
$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>
Рубрика ID 9
<ul>
<?php
global $post;
$args = array( 'posts_per_page' => -1, 'offset'=> 1, 'category' => 9 );
$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>

Вывод последних постов с помощью функции get_posts()

Выводим последние записи блока, замена стандартной функции виджета «Свежие записи» с применением дополнительных свойств.

<ul>
<?php
global $post;
$args = array( 'posts_per_page' => 5, 'offset'=> 1 );
$myposts = get_posts( $args );
foreach( $myposts as $post ){ setup_postdata($post);
?>
<li>
<?php echo get_the_date('j F Y'); ?>
<a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
<?php the_post_thumbnail (array(300,175)); ?>
<?php comments_popup_link( __( 'Комментариев нет', 'twentyten' ), __( 'Комментарий 1', 'twentyten' ), __( '<span content="Комментариев: %»>Комментариев: %</span>', 'twentyten' ) ); ?>
</li>
<?php
}
wp_reset_postdata();
?>
</ul>

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

Вывод случайных постов

Данная функция выведет 3 случайные записи блога:

<ul>
<?php
global $post;
$args = array( 'posts_per_page' => 3, 'orderby' => 'rand' );
$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>

Выводит 3 случайные записи из определенной рубрики:

<ul>
<?php
global $post;
$args = array( 'posts_per_page' => 3, 'orderby' => 'rand', 'category' => 9 );
$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>

Вывод запланированных записей

Видел довольно часто на блогах подобный функционал — анонсирование предстоящих статей:

<ul>
<?php
global $post;
$args = array( 'posts_per_page' => 3, 'post_status' => 'future' );
$myposts = get_posts( $args );
foreach( $myposts as $post ){ setup_postdata($post);
?>
<li><?php the_title(); ?></li>
<?php
}
wp_reset_postdata();
?>
</ul>

И прочие, прочие возможности функции get_posts().

С уважением,
  1. ddv5

    Я использую для генерации sitemap плагин вордпресс Dagon Design Sitemap Generator. Надо попробовать будет вместо него использовать представленный в статье пример. Его конечно надо ещё доработать.

    Ответить
    • Максим

      Да, действительно с помощью данной функции и её свойств можно корректировать код и выводить данные в html с учетом ваших потребностей. У меня на блоге карта сайта реализована именно так.

      Ответить
  2. Руслан

    Анонсирование предстоящих записей — это интересно. Возможно внедрю у себя

    Ответить

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *