Вопрос или проблема
У меня есть пользовательский тип записи ‘books’ (книги), в котором я храню различные пользовательские поля информации о книгах.
Я хочу использовать записи и связывать записи, которые я пишу (в категориях, таких как новости или предложения), с книгами.
Например, когда пользователь просматривает страницу информации о книге, я хочу иметь возможность отображать все записи в категории новостей, связанные с этой книгой.
Мне удалось сделать это, используя пользовательское поле и назначая идентификатор книги новостям. Но что, если у меня есть новость, связанная с множеством книг?
Есть ли способ объединить все названия пользовательских постов в таксономию? Как лучше всего это сделать?
Попробуйте Posts to Posts Plugin
Этот плагин позволяет создавать отношения многие-ко-многим между записями любого типа: посты, страницы, пользовательские и т.д. Несколько примеров использования:
- вручную подготовленные списки связанных постов
- серии постов
- продукты, связанные с розничными продавцами
- и т.д.
Кроме того, вы можете создавать отношения многие-ко-многим между записями и пользователями. Таким образом, вы также можете реализовать:
- избранные посты пользователей
- несколько авторов на пост
- и т.д.
Создание этих ссылок и их отображение на любой желаемой странице с помощью виджета или шорткода можно легко осуществить с помощью плагина под названием Sub Posts. Это платный плагин, но он выполнит именно то, что вы запрашиваете. Вы можете найти дополнительную информацию на www.subposts.com
В вашем файле functions.php вы можете зарегистрировать новую таксономию и связать её с вашим пользовательским типом записи, например
создайте пользовательский тип записи:
https://codex.wordpress.org/Function_Reference/register_post_type
register_post_type('books',
array(
'labels' => array(
'name' => __('Books', 'sc'),
'singular_name' => __('Book', 'sc')
),
'public' => true,
'has_archive' => true,
'rewrite' => array('slug' => 'books'),
'supports' => array('title', 'editor', 'author', 'thumbnail')
)
);
Создайте пользовательскую таксономию (аналогично категориям)
https://codex.wordpress.org/Function_Reference/register_taxonomy
register_taxonomy(
'gender',
'books',// ваше имя пользовательского поста
array(
'label' => __('Gender', 'sc'),
'rewrite' => array( 'slug' => 'gender' ),
'show_ui' => true,
'public' => true,
'show_in_quick_edit' => false,
'meta_box_cb' => false,
'show_in_menu'=>true,
'show_in_nav_menus' => true,
'query_var' => true,
)
);
.
Ответ или решение
Если вы хотите создать и управлять связями между обычными записями и записями с пользовательским типом, таких как "книги", в WordPress, существует несколько способов достижения этой цели. Прежде всего, важно понимать, что задача заключается в создании связи, которая позволяет одному элементу контента (например, новости) связываться с несколькими книгами и наоборот.
1. Использование плагинов
Posts to Posts Plugin
Один из наиболее популярных плагинов для создания отношений многие-ко-многим между постами любого типа — это Posts to Posts Plugin. Этот плагин позволяет вам:
- Создавать вручную списки связанных постов.
- Организовывать серии постов.
- Связывать продукты с ритейлерами.
Этот плагин признан среди разработчиков за свою универсальность, так как он позволяет не только связывать посты, но и посты с пользователями. Например:
- Система "избранных" постов пользователей.
- Несколько авторов на один пост.
Sub Posts
Если вам необходим более простой и интуитивный интерфейс без бесплатной альтернативы, плагин Sub Posts позволяет осуществлять желаемые действия через виджеты или короткие коды. Данный плагин не бесплатен, но его функционал полностью отвечает вашим задачам.
2. Регистрация таксономии
Другой способ решения проблемы, это использование таксономий для объединения записей:
Регистрация пользовательских типов записей
В файле functions.php
вашей темы вы можете зарегистрировать новый пользовательский тип записей, например "книги":
register_post_type('books',
array(
'labels' => array(
'name' => __('Books', 'sc'),
'singular_name' => __('Book', 'sc')
),
'public' => true,
'has_archive' => true,
'rewrite' => array('slug' => 'books'),
'supports' => array('title', 'editor', 'author', 'thumbnail')
)
);
Регистрация пользовательской таксономии
Для создания таксономии, которая будет использоваться для категоризации или связи записей, например "жанров":
register_taxonomy(
'genre',
'books',
array(
'label' => __('Genre', 'sc'),
'rewrite' => array('slug' => 'genre'),
'show_ui' => true,
'public' => true,
'show_in_quick_edit' => false,
'meta_box_cb' => false,
'show_in_menu' => true,
'show_in_nav_menus' => true,
'query_var' => true,
)
);
Заключение
Каждый из описанных способов имеет свои преимущества. Использование плагинов может значительно упростить задачу за счет готовых решений, тогда как программирование на уровне таксономий позволяет более тонко настраивать функциональность для специфических нужд вашего проекта. Важно оценить ваши потребности и выбрать решение, которое лучше всего соответствует вашим целям и профессиональным навыкам.