В больших проектах на WordPress часто возникает задача автоматизировать создание и управление иерархией контента — будь то страницы, записи или пользовательские типы записей. Ручное создание вложенных структур занимает много времени и подвержено ошибкам. В этой статье рассмотрим, как организовать автоматическое формирование иерархий с помощью плагина WPRemark и собственного кода.
Почему важно автоматизировать иерархию контента в WordPress
Иерархия контента упрощает навигацию, улучшает SEO и структуру сайта. Ручное управление становится проблемой при сотнях и тысячах записей. Автоматизация помогает:
- Сократить время на создание вложенных страниц и записей.
- Обеспечить единообразие структуры.
- Облегчить программное управление деревом контента.
- Интегрировать пользовательские логики и правила вложенности.
Плагин WPRemark изначально ориентирован на управление отзывами, но его мощные API и хуки позволяют использовать его для создания иерархий практически для любых типов записей.
Установка и базовая настройка WPRemark для работы с иерархией
Установите WPRemark через админ-панель или скачайте с официального сайта. После активации перейдите к настройкам и подключите нужный тип записей (например, page или кастомный тип).
WPRemark позволяет создавать вложенные отзывы и комментарии с поддержкой рейтингов и мета-полей. Мы будем использовать эту функциональность для создания иерархий страниц или записей.
Пример: Автоматическое создание дочерних страниц при публикации родительской
Допустим, при создании страницы с определённым шаблоном или меткой нужно автоматически создавать дочерние страницы по заранее заданному шаблону. Ниже пример кода с префиксом wphierarchy_ для функции:
add_action('publish_page', 'wphierarchy_auto_create_child_pages', 10, 2);
function wphierarchy_auto_create_child_pages($ID, $post) {
// Проверяем мета-поле, чтобы не создавать дочерние повторно
if (get_post_meta($ID, '_wphierarchy_children_created', true)) {
return;
}
// Пример: создаём 3 дочерние страницы
$children = [
['post_title' => 'Раздел 1', 'post_content' => 'Контент раздела 1'],
['post_title' => 'Раздел 2', 'post_content' => 'Контент раздела 2'],
['post_title' => 'Раздел 3', 'post_content' => 'Контент раздела 3'],
];
foreach ($children as $child) {
wp_insert_post([
'post_title' => $child['post_title'],
'post_content' => $child['post_content'],
'post_status' => 'publish',
'post_type' => 'page',
'post_parent' => $ID
]);
}
update_post_meta($ID, '_wphierarchy_children_created', 1);
}
Этот код гарантирует, что при первом опубликовании страницы создадутся три дочерних раздела. Флаг _wphierarchy_children_created предотвращает повторное добавление.
Использование WPRemark для построения иерархии отзывов с дочерними элементами
WPRemark отлично подходит для вложенных комментариев и отзывов, что можно применить как пример иерархии. Например, создадим кастомный тип «Отзывы» с поддержкой иерархии:
function wphierarchy_register_reviews_cpt() {
$args = [
'label' => 'Отзывы',
'public' => true,
'hierarchical' => true, // Важный параметр для иерархии
'supports' => ['title', 'editor', 'comments'],
];
register_post_type('review', $args);
}
add_action('init', 'wphierarchy_register_reviews_cpt');
Теперь отзывы можно структурировать как дерево. С помощью WPRemark можно добавить рейтинги, мета-поля и фильтры для отзывов, а также выводить их в виде иерархического списка.
Вывод иерархии отзывов в шаблоне
Для вывода используем WP_Query с параметром post_parent и рекурсивный вызов для построения дерева:
function wphierarchy_display_reviews_tree($parent_id = 0) {
$args = [
'post_type' => 'review',
'post_parent' => $parent_id,
'orderby' => 'date',
'order' => 'DESC',
'posts_per_page' => -1
];
$query = new WP_Query($args);
if ($query->have_posts()) {
echo '<ul>';
while ($query->have_posts()) {
$query->the_post();
echo '<li>' . get_the_title() . ' - ' . get_the_content();
// Рекурсивно выводим дочерние отзывы
wphierarchy_display_reviews_tree(get_the_ID());
echo '</li>';
}
echo '</ul>';
}
wp_reset_postdata();
}
Вызовите wphierarchy_display_reviews_tree() в нужном месте шаблона для отображения всей иерархии отзывов.
Дополнительные советы по оптимизации иерархий в WordPress
Иерархии при большом количестве элементов могут замедлять сайт. Рекомендуется:
- Кэшировать результаты запросов с помощью Transients API или внешних кешей.
- Использовать AJAX-загрузку дочерних элементов по клику, чтобы не грузить сразу всю структуру.
- Применять индексацию мета-полей для быстрого поиска и фильтрации.
- Использовать плагины оптимизации, например Clearfy Pro для общей оптимизации базы данных и запросов.
Пример AJAX-загрузки дочерних элементов
Добавим обработчик AJAX в functions.php:
add_action('wp_ajax_wphierarchy_load_children', 'wphierarchy_load_children_callback');
add_action('wp_ajax_nopriv_wphierarchy_load_children', 'wphierarchy_load_children_callback');
function wphierarchy_load_children_callback() {
$parent_id = intval($_POST['parent_id']);
if (!$parent_id) wp_send_json_error('Invalid parent ID');
ob_start();
wphierarchy_display_reviews_tree($parent_id);
$html = ob_get_clean();
wp_send_json_success(['html' => $html]);
}
В JS нужно отправить AJAX-запрос с parent_id и подставить ответ в DOM. Это разгрузит сервер и ускорит работу интерфейса.
Заключение: автоматизация иерархий — залог удобства и стабильности
Использование WPRemark наряду с кастомным кодом позволяет создавать мощные и гибкие иерархии в WordPress, будь то страницы, записи или отзывы. Автоматизация с помощью хуков и AJAX улучшит управление контентом и пользовательский опыт. Экспериментируйте с приведёнными примерами и адаптируйте их под свои задачи.