Дуже часто треба створити список постів на сторінці сайту, використовуючи різні додаткові параметри. Для створення таких списків, що настроюються, необхідно застосовувати кілька різних параметрів і запитів. Але є й інший, простіший шлях вирішення цього завдання.
Завантажити вихідні
У цьому пості йдеться про використання шорт-коду для різних типів постів та списків, що дозволить вам створювати практично будь-які переліки на сторінках сайту WordPress.
Для початку: Створюємо контент
Перед початком роботи із шорт-кодом треба зареєструвати новий тип постів с 2 типами таксономіїяка буде використовуватися для тестування нашого шорт-коду.
Дивіться також:
Сам код міститься у плагіні, який був написаний спеціально для виконання шорт-коду; хоча в реальних, а не тестових проектах, ми рекомендуємо застосовувати окремо код та окремо – плагін для виконання цього коду.
Для початку створюємо новий файл у папці з плагінами під назвою post-listing-shortcode.php. У нього розміщуємо код, який наведено нижче.
Примітка: Створення видів постів, що настроюються, і пов'язаної з ними таксономії — не ключовий момент у цьому практичному керівництві Якщо хочете, можете копіювати наведений далі код із завантаженого вами файлу та пропустити цей крок.
<?php
/*
Plugin Name: WPTutsPlus Post-listing shortcode
Plugin URI:
Description: This plugin provides a shortcode to list posts, with parameters. It also registers a couple of post types and tacxonomies to work with.
Version: 1.0
Author: Rachel McCollin
Author URI:
License: GPLv2
*/
// register custom post type to work with
add_action( 'init', 'rmcc_create_post_type' );
function rmcc_create_post_type() { // clothes custom post type
// set up labels
$labels = array(
'name' =--> 'Clothes',
'singular_name' => 'Clothing Item',
'add_new' => 'Add New',
'add_new_item' => 'Add New Clothing Item',
'edit_item' => 'Edit Clothing Item',
'new_item' => 'New Clothing Item',
'all_items' => 'All Clothes',
'view_item' => 'View Clothing Item',
'search_items' => 'Search Clothes',
'not_found' => 'No Clothes Found',
'not_found_in_trash' => 'No Clothes found in Trash',
'parent_item_colon' => '',
'menu_name' => 'Clothes',
);
register_post_type(
'clothes',
array(
'labels' => $labels,
'has_archive' => true,
'public' => true,
'hierarchical' => true,
'supports' => array( 'title', 'editor', 'excerpt', 'custom-fields', 'thumbnail','page-attributes' ),
'taxonomies' => array( 'post_tag', 'category' ),
'exclude_from_search' => true,
'capability_type' => 'post',
)
);
}
// register two taxonomies to go with the post type
add_action( 'init', 'rmcc_create_taxonomies', 0 );
function rmcc_create_taxonomies() {
// color taxonomy
$labels = array(
'name' => _x( 'Colors', 'taxonomy general name' ),
'singular_name' => _x( 'Color', 'taxonomy singular name' ),
'search_items' => __( 'Search Colors' ),
'all_items' => __( 'All Colors' ),
'parent_item' => __( 'Parent Color' ),
'parent_item_colon' => __( 'Parent Color:' ),
'edit_item' => __( 'Edit Color' ),
'update_item' => __( 'Update Color' ),
'add_new_item' => __( 'Add New Color' ),
'new_item_name' => __( 'New Color' ),
'menu_name' => __( 'Colors' ),
);
register_taxonomy(
'color',
'clothes',
array(
'hierarchical' => true,
'labels' => $labels,
'query_var' => true,
'rewrite' => true,
'show_admin_column' => true
)
);
// fabric taxonomy
$labels = array(
'name' => _x( 'Fabrics', 'taxonomy general name' ),
'singular_name' => _x( 'Fabric', 'taxonomy singular name' ),
'search_items' => __( 'Search Fabrics' ),
'all_items' => __( 'All Fabric' ),
'parent_item' => __( 'Parent Fabric' ),
'parent_item_colon' => __( 'Parent Fabric:' ),
'edit_item' => __( 'Edit Fabric' ),
'update_item' => __( 'Update Fabric' ),
'add_new_item' => __( 'Add New Fabric' ),
'new_item_name' => __( 'New Fabric' ),
'menu_name' => __( 'Fabrics' ),
);
register_taxonomy(
'fabric',
'clothes',
array(
'hierarchical' => true,
'labels' => $labels,
'query_var' => true,
'rewrite' => true,
'show_admin_column' => true
)
);
}
?>Цей код "повідомляє" движку WordPress про новий плагін і реєструє тип постів, що настроюється.одяг' і 2 види в рамках таксономії - 'color'І'тканину.
Новий плагін ми зберігаємо та активуємо його на сторінці "Плагіни" в консолі WordPress.
Ми створили власний тип постів і таксономію до нього. Тепер час зайнятися створенням контенту. Ось як це виглядатиме:

Створюємо простий шорт-код для списку
Якщо ви просто хочете представити пости в формат списку, можна створити дуже простий шорт-код, в якому не використовується ніяких додаткових параметрів.
Для цього відкрийте файл знову і додайте до нього наступний код:
// create shortcode to list all clothes which come in blue
add_shortcode( 'list-posts-basic', 'rmcc_post_listing_shortcode1' );
function rmcc_post_listing_shortcode1( $atts ) {
ob_start();
$query = new WP_Query( array(
'post_type' => 'clothes',
'color' => 'blue',
'posts_per_page' => -1,
'order' => 'ASC',
'orderby' => 'title',
) );
if ( $query->have_posts() ) { ?>
<ul class="clothes-listing">
<?php while ( $query->have_posts() ) : $query->the_post(); ?>
<li id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
<a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
</li>
<?php endwhile;
wp_reset_postdata(); ?>
</ul>
<?php $myvariable = ob_get_clean();
return $myvariable;
}
}Ось у нас з'явився простий шорт-код із використанням WP_Query для виконання настроюваного запиту до контенту та видачі результату у форматі списку постів. Коли вводимо [list-posts-basic] на сторінці, результати відображаються так:

Додаємо параметри для зміни запиту
Але від нашого шорт-коду буде набагато більше користі, якщо ми додамо до нього якісь вибіркові параметри, Наприклад:
- Скільки постів має бути у списку
- Які типи постів торкаються нашого запиту
- Які категорії мають бути включені до запиту
- Які кольори та матеріали тканини повинні фігурувати у списку
- Упорядкування параметрів
Для додавання цих додаткових параметрів до нашого шорт-коду ми використовуємо функцію shortcode_atts()дозволяє нам визначити конкретні атрибути для використання.
І ось у ваш код треба внести такі зміни (у файлі плагіна):
// create shortcode with parameters so that the user can define what's queried - default is to list all blog posts
add_shortcode( 'list-posts', 'rmcc_post_listing_parameters_shortcode' );
function rmcc_post_listing_parameters_shortcode( $atts ) {
ob_start();
// define attributes and their defaults
extract( shortcode_atts( array (
'type' => 'post',
'order' => 'date',
'orderby' => 'title',
'posts' => -1,
'color' => '',
'fabric' => '',
'category' => '',
), $atts ) );
// define query parameters based on attributes
$options = array(
'post_type' => $type,
'order' => $order,
'orderby' => $orderby,
'posts_per_page' => $posts,
'color' => $color,
'fabric' => $fabric,
'category_name' => $category,
);
$query = new WP_Query( $options );
// run the loop based on the query
if ( $query->have_posts() ) { ?>
<ul class="clothes-listing ">
<ul class="clothes-listing ">
<li id="post-<?php the_ID(); ?>">></li>
</ul>
</ul>
<?php
$myvariable = ob_get_clean();
return $myvariable;
}
}Примітка: Застосування ob_start () и ob_get_clean() як параметри гарантує вам, що виведення циклу відбудеться на тій самій сторінці або на тому ж посту, де ви помістили свій шорт-код. Якщо ви не додасте ці параметри, список буде виводитися просто вгорі до завантаження решти контенту.
За умовчанням усі пости сортуються за датою за спаданням, так що якщо ви вкажете параметр [list-posts] на сторінці або в пості, то отримаєте такий результат, як на малюнку нижче:

Але якщо додати кілька інших параметрів, то може вийти видача і цікавіше за колишню. Наприклад, щоб скласти список усіх видів одягу чорного кольору, вводимо:
[list-posts type="clothes" color="black" orderby="name" order="ASC"]
А щоб перерахувати у списку всі найменування одягу з категорії 'розумний', вводимо:
[list-posts type="clothes" category="smart" orderby="name" order="ASC"]
Якщо вам потрібно вказати більше параметрів, можна визначити більше атрибутів, з якими зможуть працювати користувачі, які задають запити для сортування та отримання списків. Але вам потрібно всі ці доступні параметри для списків та сортування включити у ваш плагін у функцію extract( shortcode_atts)).
Не варто вказувати значення за промовчанням для всіх цих параметрів (наприклад, я залишив порожнім значення для категорії та таксономії). Параметри, які ви можете задати у явному вигляді, це ті, які можна визначити у WP_Query. Для доступу до їх повного переліку подивіться ось цю Codex-сторінку.
Підводимо підсумки
Додавання списку постів / товарів / предметів на сторінку або пост - зручна фішка для будь-якого інтернет-ресурсу, яка може розширити і доповнити його функціональність. Шорт-коди, про які йшлося в цьому практичному уроці, допоможуть вам вирішити завдання додавання списків, що настроюються, з різними параметрами. Код у циклі, наведений у прикладах цього практичного заняття, можна замінити на теги для відображення картинок, різних видів контенту і так далі.
Корисні посилання
За темою створення списків на основі шорт-кодів вам знадобляться:
- The Shortcode API
- Атрибути шорт-кодів
- WP_Query та параметри для нього





















Коментарі до запису: 7
Дякуємо за статтю.
Підкажіть потім отриманий стовпець розбити на колонки (оптимально на 3).
Виведення тегів запису до шаблону запису:
Заголовок тегів:
<?php
echo '';
echo get_the_term_list($post->ID, 'post_tag', », », »);
echo»;
?>
Виведення таксономії 'poslugi' у шаблон запису:
Заголовок таксономії:
<?php
echo '';
echo get_the_term_list($post->ID, 'poslugi', », », »);
echo»;
?>
Теги:
<?php
echo '';
echo get_the_term_list($post->ID, 'post_tag', », », »);
echo»;
?>
У файл стилів додав таке:
/* стилі для блоку виведення тегів і таксономій та безпосередньо розбивки даних на 3 стовпці*/
#three-columns{
/* Кількість колонок */
-webkit-column-count: 3;
-moz-column-count: 3;
column-count: 3;
}
#three-columns > ul li {
list-style: none; /* Забираємо маркери списку */
запас: 0;
}
#three-columns > ul li > a {
Дисплей: блок;
padding:4px 0 4px 2px;
color: #067AB4; /* Колір посилань */
border-bottom:1px dotted #53575f;
font-family: 'helvetica neue', Helvetica, sans-serif; /* шрифт */
font-size: smaller; /* Розмір шрифту */
}
#three-columns > ul li > a:hover {
background-color: #f0f0f0;
}
/* стилі для блоку виведення тегів та таксономій - кінець */
Корисна стаття Ось тільки не зрозуміло чому, але потім не можу подивитися створений пост. Сторінку не знайдено. Використання WP 4.4. Може там щось змінилося в двигуні?
Вам потрібно зайти в Налаштування => Постійні посилання, та оновити всі налаштування
Дивно… Заліз у «Налаштування постійних посилань»
Змінив спочатку на прості види "? p = 123". Почали відкриватися. Потім змінив на назву запису і зберіг. І сторінки стали нормально відкриватися))
Чудова стаття! Але як реалізувати пагінацію?
У мене виводяться лише звичайні записи: (