- Вопрос или проблема
- 1. Создайте тип записи “Цитаты”
- 2. Добавьте поля связи ACF
- 3. Отобразите объединенное содержимое
- Ответ или решение
- Шаг 1: Создание пользовательского типа поста "Цитаты"
- Шаг 2: Добавление полей зависимостей с помощью Advanced Custom Fields (ACF)
- Шаг 3: Отображение объединенного контента
- Заключение
Вопрос или проблема
Я уже могу:
- Создать два разных типа пользовательских записей (например: “Книги” и “Авторы”) и отобразить их содержимое.
- Связать эти два типа пользовательских записей вместе в бэк-офисе и фронт-офисе (с использованием WP Query и “поля связи” из ACF);
- Отобразить данные из первого CPT во втором (например, “Запись о книге” отображает информацию о “Записи об авторе”, а “Запись об авторе” отображает информацию о “Записи о книге”).
Что я хочу достичь, так это отобразить на третьей записи (которая не является записью о книге и не является записью об авторе) специфическое содержимое, которое объединяет данные из обеих записей. Давайте, чтобы проиллюстрировать эту точку:
“Джон Доу, родившийся в 1900 году, который написал Название романа, является автором этой знаменитой цитаты: [здесь цитата].
Приведенный выше пример отличается от отображения содержимого из “записи об авторе” в “записи о книге”. Его цель – именно отобразить это содержимое на третьей записи, которая не является example.com/john-doe/ и не является example.com/title-of-the-novel/, а example.com/quote-from-john-doe-in-title-of-the-novel/.
Чтобы отобразить содержимое из двух типов пользовательских записей (CPT), таких как “Книги” и “Авторы”, на третьем CPT (например, “Цитаты”), выполните следующие шаги:
1. Создайте тип записи “Цитаты”
В functions.php
зарегистрируйте новый CPT:
function create_quote_post_type() {
register_post_type( 'quote',
array(
'labels' => array(
'name' => __( 'Цитаты' ),
'singular_name' => __( 'Цитата' )
),
'public' => true,
'has_archive' => true,
'supports' => array( 'title', 'editor' ),
'rewrite' => array( 'slug' => 'quotes' ),
)
);
}
add_action( 'init', 'create_quote_post_type' );
2. Добавьте поля связи ACF
С помощью Advanced Custom Fields (ACF) добавьте два поля связи к CPT “Цитаты”:
- Одно связывающее с “Авторами”
- Другое связывающее с “Книгами”
3. Отобразите объединенное содержимое
В шаблоне single-quote.php
извлеките данные из связанных записей и отобразите их:
<?php
$author = get_field( 'author_relationship_field' );
$book = get_field( 'book_relationship_field' );
if ( $author && $book ) {
$author_name = get_the_title( $author->ID );
$birth_year = get_field( 'birth_year', $author->ID );
$book_title = get_the_title( $book->ID );
$book_quote = get_field( 'quote', $book->ID );
echo "<p>{$author_name}, родившийся в {$birth_year}, написал <em>{$book_title}</em> и сказал: \"{$book_quote}\".</p>";
}
?>
Вот и все!
Теперь, когда вы создаете запись “Цитата” и связываете ее с “Книгой” и “Автором”, шаблон будет извлекать содержимое из обеих записей и отображать его.
Ответ или решение
Создание поста, который отображает данные из двух различных пользовательских типов постов (CPT), таких как "Книги" и "Авторы", на третьем посте (например, "Цитаты"), требует выполнения нескольких шагов. Ниже приведены подробные инструкции по выполнению этой задачи.
Шаг 1: Создание пользовательского типа поста "Цитаты"
В файле functions.php
вашей темы зарегистрируйте новый пользовательский тип поста:
function create_quote_post_type() {
register_post_type( 'quote',
array(
'labels' => array(
'name' => __( 'Цитаты' ),
'singular_name' => __( 'Цитата' )
),
'public' => true,
'has_archive' => true,
'supports' => array( 'title', 'editor' ),
'rewrite' => array( 'slug' => 'quotes' ),
)
);
}
add_action( 'init', 'create_quote_post_type' );
Шаг 2: Добавление полей зависимостей с помощью Advanced Custom Fields (ACF)
С помощью плагина Advanced Custom Fields (ACF) добавьте два поля зависимостей к пользовательскому типу поста "Цитаты":
- Первое поле для связи с "Авторами".
- Второе поле для связи с "Книгами".
Шаг 3: Отображение объединенного контента
В шаблоне single-quote.php
вам нужно извлечь данные из связанных постов и отобразить их:
<?php
$author = get_field( 'author_relationship_field' ); // Замена на фактическое имя поля
$book = get_field( 'book_relationship_field' ); // Замена на фактическое имя поля
if ( $author && $book ) {
$author_name = get_the_title( $author->ID );
$birth_year = get_field( 'birth_year', $author->ID ); // Предполагается, что поле с годом рождения существует
$book_title = get_the_title( $book->ID );
$book_quote = get_field( 'quote', $book->ID ); // Предполагается, что поле с цитатой существует
echo "<p>{$author_name}, родившийся в {$birth_year}, написал <em>{$book_title}</em> и сказал: \"{$book_quote}\".</p>";
}
?>
Заключение
Теперь, когда вы создаете пост "Цитата" и связываете его с "Книгой" и "Автором", шаблон будет извлекать информацию из обоих постов и отображать их в нужном формате.
Придерживаясь этого руководства, вы сможете успешно создавать объединенные контенты из различных пользовательских типов постов, расширяя функциональные возможности вашего сайта на WordPress.