Как добавить поддержку мультипостинговых записей в WordPress

В стандартном WordPress каждая запись (пост) относится только к одному типу записи. Но часто возникает задача, когда нужно, чтобы одна запись одновременно принадлежала к нескольким типам или категориям, например, пост может быть одновременно новостью, обзором и кейсом. Такая возможность называется мультипостинговой поддержкой. В этой статье мы подробно разберём, как реализовать такую функциональность на уровне кода и с помощью плагинов, а также рассмотрим практические примеры.

Почему стандартный WordPress не поддерживает мультипостинг

По умолчанию WordPress строит структуру сайта вокруг единственного типа записи – post (запись) и пользовательских типов (custom post types). Каждая запись принадлежит только одному типу. В то же время категории и метки позволяют классифицировать записи, но не дают полноценного мультипостинга — то есть возможность с одной записью работать как с несколькими типами одновременно.

Это ограничение связано с архитектурой базы данных и обработкой запросов внутри WordPress. Однако при помощи нестандартных подходов и расширений его можно обойти.

Подходы к реализации мультипостинга в WordPress

1. Использование пользовательских таксономий вместо типов записей

Один из простых способов — создавать пользовательские таксономии, например, «Тип записи», и присваивать записи несколько терминов из этой таксономии. Тогда можно фильтровать записи по нужным типам. Но это — не полноценный мультипостинг, так как запись остаётся одного типа, а типы лишь имитируются таксономией.

Пример регистрации таксономии:

function wpgen_register_post_types_taxonomy() {
    register_taxonomy('multi_post_type', 'post', array(
        'label' => 'Типы записей',
        'hierarchical' => true,
        'show_ui' => true,
        'rewrite' => array('slug' => 'multi-post-type'),
    ));
}
add_action('init', 'wpgen_register_post_types_taxonomy');

2. Связь записей через метаполя и плагин Advanced Custom Fields (ACF)

Можно создавать связь между разными записями и типами через метаполя — например, поле с выбором связанных постов. Плагин ACF отлично помогает реализовать такой функционал без сложного кода.

Пример: добавим метаполе для связи с несколькими типами записей, а затем на фронтенде выведем все связанные записи.

3. Использование плагина WP Post Type Relationships

Этот плагин позволяет создавать связи между разными типами записей, эффективно реализуя мультипостинг. Он предоставляет API для работы с отношениями, а также удобный интерфейс.

Ссылка на плагин: WP Post Type Relationships

Практическое решение: мультипостинг через отдельную таблицу связей

Если нужен максимальный контроль, можно реализовать мультипостинг, создав свою таблицу в базе данных, где будут храниться связи записи с типами. Ниже — пример упрощённой реализации.

Шаг 1: Создаём таблицу для связей

function wpgen_create_multiposting_table() {
    global $wpdb;
    $table_name = $wpdb->prefix . 'wpgen_multiposting';
    $charset_collate = $wpdb->get_charset_collate();

    $sql = "CREATE TABLE $table_name (
        id bigint(20) unsigned NOT NULL AUTO_INCREMENT,
        post_id bigint(20) unsigned NOT NULL,
        post_type varchar(100) NOT NULL,
        PRIMARY KEY  (id),
        KEY post_id (post_id),
        KEY post_type (post_type)
    ) $charset_collate;";

    require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
    dbDelta($sql);
}
register_activation_hook(__FILE__, 'wpgen_create_multiposting_table');

Шаг 2: Функции для добавления и получения связей

function wpgen_add_post_type_relation($post_id, $post_type) {
    global $wpdb;
    $table = $wpdb->prefix . 'wpgen_multiposting';
    $wpdb->insert($table, [
        'post_id' => $post_id,
        'post_type' => $post_type
    ]);
}

function wpgen_get_post_types_for_post($post_id) {
    global $wpdb;
    $table = $wpdb->prefix . 'wpgen_multiposting';
    return $wpdb->get_col($wpdb->prepare("SELECT post_type FROM $table WHERE post_id = %d", $post_id));
}

Шаг 3: Использование в шаблонах и запросах

Теперь можно создавать записи и программно назначать им несколько типов, а при выводе фильтровать по этим типам, используя собственные запросы к таблице.

Пример: фильтрация записей по мультипостинговому типу

Чтобы получить все записи, относящиеся к определённому типу из мультипостинга, можно использовать следующий код:

function wpgen_get_posts_by_multipost_type($post_type, $args = []) {
    global $wpdb;
    $table = $wpdb->prefix . 'wpgen_multiposting';

    $post_ids = $wpdb->get_col($wpdb->prepare("SELECT post_id FROM $table WHERE post_type = %s", $post_type));

    if (empty($post_ids)) {
        return [];
    }

    $query_args = array_merge([ 
        'post__in' => $post_ids,
        'post_type' => 'post',
        'posts_per_page' => -1
    ], $args);

    $query = new WP_Query($query_args);
    return $query->posts;
}

Интеграция с плагином Clearfy Pro для управления постами

Если вы используете Clearfy Pro от WPSHOP, он позволяет гибко управлять типами записей и оптимизировать их работу. В сочетании с нашей реализацией мультипостинга можно получить мощный инструмент для кастомизации контента.

Выводы и рекомендации

Мультипостинг в WordPress — задача нетривиальная, требующая либо использования сторонних плагинов, либо создания кастомных решений. Вариант с отдельной таблицей связей — наиболее универсальный и гибкий, но требует аккуратности при разработке и оптимизации запросов.

Для большинства проектов достаточно использования пользовательских таксономий или плагинов для связей. Но если нужна глубокая кастомизация, настоятельно рекомендуем реализовать свой механизм с учётом особенностей вашего сайта и нагрузки.

Как создать функцию автоматического удаления старых записей через WP-Cron в WordPress
07.01.2026
Как создать настройки плагина WordPress с использованием Settings API
20.12.2025
Как автоматически устанавливать приватность записей в WordPress
18.02.2026
Создание подробного лога ошибок в WordPress для эффективной отладки
31.03.2026
Как избежать конфликтов между плагинами в WordPress
31.01.2026