Как создать запись, которая отображает часть контента из двух разных записей, относящихся к двум различным пользовательским типам записей?

Вопрос или проблема

Я уже могу:

  1. Создать два разных типа пользовательских записей (например: “Книги” и “Авторы”) и отобразить их содержимое.
  2. Связать эти два типа пользовательских записей вместе в бэк-офисе и фронт-офисе (с использованием WP Query и “поля связи” из ACF);
  3. Отобразить данные из первого 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) добавьте два поля зависимостей к пользовательскому типу поста "Цитаты":

  1. Первое поле для связи с "Авторами".
  2. Второе поле для связи с "Книгами".

Шаг 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.

Оцените материал
Добавить комментарий

Капча загружается...