Зная, как не любима тема «работы с функциями 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 (строчное значение) — выводит определенный тип поста или массив с указанием через запятую:
- attachment — прикрепленные вложения,
- page — страницы,
- post — записи,
- array (‘post’ , ‘page’).
- post_mime_type (строчное значение) — указывает тип прикрепления, используется с параметром post_type.
- image/jpeg
- image/png
- image/gif
- image — для любых картинок
- audio/mpeg
- application/pdf
- application/zip
- post_status (строчное значение) — передает статус записи:
- publish — опубликовано
- private — личная запись
- draft — черновик
- future — запланировано
- inherit — вложение, любое вложение получает этот статус.
- any — все статусы.
- post_parent (числовое значение) — выводить только дочерние страницы к указанному ID.
- nopaging (логическое значение) — по умолчанию отключено. Включает или отключает пагинацию.
- 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.
- order (строчное значение) — порядок вывода значения $orderby:
- ASC — прямой порядок,
- 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().
Я использую для генерации sitemap плагин вордпресс Dagon Design Sitemap Generator. Надо попробовать будет вместо него использовать представленный в статье пример. Его конечно надо ещё доработать.
Да, действительно с помощью данной функции и её свойств можно корректировать код и выводить данные в html с учетом ваших потребностей. У меня на блоге карта сайта реализована именно так.
Анонсирование предстоящих записей — это интересно. Возможно внедрю у себя