Ведение списка литературы или библиографии на сайте — важная задача для многих тематических журналов, блогов и образовательных ресурсов. В WordPress можно реализовать автоматическую генерацию такого списка с помощью плагинов и кастомных решений. В этой статье разберём, как создать автоматический список литературы, который будет удобно обновляться и отображаться на страницах сайта.
Почему нужен автоматический список литературы в WordPress
Ручное создание и обновление библиографии занимает много времени и порождает ошибки, особенно если в статьях много цитат и источников. Автоматизация процесса позволяет:
- Экономить время при добавлении и редактировании источников.
- Обеспечить единый стиль оформления списка литературы.
- Обновлять список автоматически при добавлении новых цитат.
- Упрощать навигацию для читателей и улучшать SEO за счёт правильного структурирования данных.
Для реализации этого можно использовать специализированные плагины или написать собственный код, который будет интегрироваться с редактором WordPress.
Использование плагинов для списка литературы
Рассмотрим несколько популярных плагинов, которые позволяют организовать список литературы:
Cite
Cite — плагин для управления ссылками на источники и автоматической генерации списка литературы. Позволяет вставлять цитаты с помощью шорткодов, а также формировать список с возможностью настройки стилей.
Преимущества:
- Простота использования.
- Поддержка нескольких стилей цитирования (APA, MLA, Chicago и др.).
- Автоматическое нумерование ссылок.
WP Academic Citation
Плагин WP Academic Citation разработан специально для образовательных и научных сайтов. Позволяет создавать и управлять базой источников, вставлять цитаты и формировать библиографию.
Особенности:
- Интеграция с Gutenberg и классическим редактором.
- Поддержка пользовательских стилей оформления.
- Отдельная страница с полным списком литературы.
Создание собственного решения для списка литературы в WordPress
Если вы хотите гибко контролировать процесс и не зависеть от готовых плагинов, можно реализовать список литературы с помощью пользовательского типа записи и шорткодов. Рассмотрим пример реализации такой системы.
1. Создание кастомного типа записи для источников
Добавим в файл functions.php вашей темы или в собственный плагин следующий код:
function journalx_register_source_post_type() {
$labels = array(
'name' => 'Источники',
'singular_name' => 'Источник',
'add_new' => 'Добавить источник',
'add_new_item' => 'Добавить новый источник',
'edit_item' => 'Редактировать источник',
'new_item' => 'Новый источник',
'all_items' => 'Все источники',
'view_item' => 'Просмотреть источник',
'search_items' => 'Поиск источников',
'not_found' => 'Источники не найдены',
'not_found_in_trash' => 'В корзине источники не найдены',
'menu_name' => 'Источники'
);
$args = array(
'labels' => $labels,
'public' => false,
'show_ui' => true,
'show_in_menu' => true,
'capability_type' => 'post',
'hierarchical' => false,
'supports' => array('title', 'editor'),
'menu_position' => 20,
'menu_icon' => 'dashicons-book'
);
register_post_type('journalx_source', $args);
}
add_action('init', 'journalx_register_source_post_type');Этот код создаёт тип записи «Источники», в котором вы сможете хранить данные о каждой литературе или цитате.
2. Добавление метаполей для данных источника
Для каждого источника полезно хранить такие данные, как автор, год издания, издательство и т.п. Для этого можно использовать метаполя, например, с помощью плагина Advanced Custom Fields или вручную.
Пример добавления метабокса вручную:
function journalx_add_source_meta_box() {
add_meta_box('journalx_source_details', 'Детали источника', 'journalx_source_meta_box_callback', 'journalx_source', 'normal', 'high');
}
add_action('add_meta_boxes', 'journalx_add_source_meta_box');
function journalx_source_meta_box_callback($post) {
wp_nonce_field('journalx_save_source_meta', 'journalx_source_meta_nonce');
$author = get_post_meta($post->ID, '_journalx_author', true);
$year = get_post_meta($post->ID, '_journalx_year', true);
$publisher = get_post_meta($post->ID, '_journalx_publisher', true);
echo '<p><label>Автор: <input type="text" name="journalx_author" value="'.esc_attr($author).'" /></label></p>';
echo '<p><label>Год издания: <input type="text" name="journalx_year" value="'.esc_attr($year).'" /></label></p>';
echo '<p><label>Издательство: <input type="text" name="journalx_publisher" value="'.esc_attr($publisher).'" /></label></p>';
}
function journalx_save_source_meta($post_id) {
if (!isset($_POST['journalx_source_meta_nonce']) || !wp_verify_nonce($_POST['journalx_source_meta_nonce'], 'journalx_save_source_meta')) {
return;
}
if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) {
return;
}
if (isset($_POST['journalx_author'])) {
update_post_meta($post_id, '_journalx_author', sanitize_text_field($_POST['journalx_author']));
}
if (isset($_POST['journalx_year'])) {
update_post_meta($post_id, '_journalx_year', sanitize_text_field($_POST['journalx_year']));
}
if (isset($_POST['journalx_publisher'])) {
update_post_meta($post_id, '_journalx_publisher', sanitize_text_field($_POST['journalx_publisher']));
}
}
add_action('save_post', 'journalx_save_source_meta');3. Вставка цитат и генерация списка литературы через шорткод
Чтобы вставлять цитаты в тексте, создадим шорткод [citation id="123"], где 123 — ID источника. Также реализуем шорткод для вывода полного списка литературы.
function journalx_citation_shortcode($atts) {
$atts = shortcode_atts(array('id' => 0), $atts);
$id = intval($atts['id']);
if (!$id) return '';
$post = get_post($id);
if (!$post || $post->post_type !== 'journalx_source') return '';
static $citations = array();
if (!in_array($id, $citations)) {
$citations[] = $id;
}
$number = array_search($id, $citations) + 1;
return '<sup>['.$number.'</sup>';
}
add_shortcode('citation', 'journalx_citation_shortcode');
function journalx_bibliography_shortcode() {
global $post;
// Получаем все ID использованных источников
static $used_citations = array();
if (empty($used_citations)) {
// Пытаемся получить из глобальной переменной
$used_citations = array();
}
// Чтобы получить используемые источники, можно хранить их в transient или сессии.
// Для простоты выведем все источники.
$args = array(
'post_type' => 'journalx_source',
'posts_per_page' => -1,
'orderby' => 'title',
'order' => 'ASC'
);
$sources = get_posts($args);
if (empty($sources)) return '<p>Список литературы пуст.</p>';
$output = '<ol>';
foreach ($sources as $source) {
$author = get_post_meta($source->ID, '_journalx_author', true);
$year = get_post_meta($source->ID, '_journalx_year', true);
$publisher = get_post_meta($source->ID, '_journalx_publisher', true);
$title = esc_html($source->post_title);
$author = esc_html($author);
$year = esc_html($year);
$publisher = esc_html($publisher);
$output .= "<li>{$author}. <em>{$title}</em>, {$publisher}, {$year}.</li>";
}
$output .= '</ol>';
return $output;
}
add_shortcode('bibliography', 'journalx_bibliography_shortcode');Теперь в любом месте статьи можно вставить цитату так: [citation id="123"], а в конце — полный список литературы: [bibliography].
Дополнительные советы по работе со списком литературы в WordPress
Использование плагина JournalX для журналов
Если вы используете тему или плагин JournalX, можно интегрировать список литературы с функциями создания и публикации статей, что позволит вести полноценный научный журнал с удобным управлением источниками.
Автоматизация вставки цитат через WPRemark
Плагин WPRemark позволяет создавать и управлять заметками и комментариями, что можно адаптировать для вставки ссылок на источники прямо в тексте с сохранением их в базе данных.
Оптимизация вывода и кеширование
При большом количестве источников рекомендуется использовать кеширование шорткодов с помощью Transients API, чтобы снизить нагрузку на базу данных и ускорить загрузку страниц сайта.
Например, можно кешировать результат функции journalx_bibliography_shortcode так:
function journalx_bibliography_shortcode() {
$cache_key = 'journalx_bibliography_html';
$output = get_transient($cache_key);
if ($output !== false) {
return $output;
}
// Генерация списка (как выше)
// ... код генерации списка ...
set_transient($cache_key, $output, DAY_IN_SECONDS);
return $output;
}Заключение по созданию автоматического списка литературы
Создание автоматического списка литературы в WordPress — задача решаемая с помощью готовых плагинов или собственного кода. Использование кастомного типа записи и шорткодов даёт гибкость и позволяет подстроить функционал под любые требования. В сочетании с темой JournalX и плагинами WPShop можно получить мощный инструмент для ведения научных и образовательных сайтов.