wplinks.ru wordpress WPLinks.ru

Как создать динамические связи между записями WordPress с примерами кода

Что такое динамические связи между записями WordPress и зачем они нужны

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

Динамические связи между записями — это не просто статические ссылки, а гибкие взаимосвязи, которые можно создавать и изменять программно или через интерфейс. Например, связь может быть как «родитель – потомок», так и «похожие записи» или «записи из одной категории с дополнительными условиями».

Реализация таких связей требует знания WordPress API, использования мета-полей, таксономий или даже кастомных таблиц. В этой статье мы рассмотрим несколько способов создания динамических связей, а также полезные плагины и примеры кода для их реализации.

Использование плагина Posts 2 Posts для создания связей между записями

Один из самых популярных и простых способов создать динамические связи — плагин Posts 2 Posts. Он позволяет создавать отношения «многие ко многим» между записями, страницами и кастомными типами записей.

Плагин не поддерживается официально уже несколько лет, но до сих пор работает стабильно и широко используется.

Установка и настройка Posts 2 Posts

Плагин доступен на GitHub: https://github.com/scribu/wp-posts-to-posts. Для установки скачайте и загрузите папку плагина в директорию wp-content/plugins, затем активируйте в админке.

Далее в файле functions.php темы или в отдельном плагине добавьте регистрацию связи:

function wplinks_register_post_connections() {
    if ( ! function_exists( 'p2p_register_connection_type' ) ) {
        return;
    }
    p2p_register_connection_type( array(
        'name' => 'articles_to_projects',
        'from' => 'post',
        'to' => 'project', // кастомный тип записи
        'cardinality' => 'many-to-many',
        'admin_box' => array(
            'show' => 'both',
            'context' => 'advanced'
        ),
    ) );
}
add_action( 'p2p_init', 'wplinks_register_post_connections' );

После этого в админке постов и проектов появится мета-бокс для создания связей. Вы можете выбирать связанные записи вручную — эти связи динамические и можно управлять ими через API.

Вывод связанных записей в шаблоне

Чтобы вывести связанные записи, используйте следующий код в шаблоне:

function wplinks_show_connected_projects() {
    global $post;
    $connected = new WP_Query( array(
        'connected_type' => 'articles_to_projects',
        'connected_items' => $post,
        'nopaging' => true,
    ) );

    if ( $connected->have_posts() ) {
        echo '<ul>';
        while ( $connected->have_posts() ) {
            $connected->the_post();
            echo '<li><a href="' . get_permalink() . '">' . get_the_title() . '</a></li>';
        }
        echo '</ul>';
    }
    wp_reset_postdata();
}

Этот код можно вставить в single.php или в любой другой шаблон для вывода связанных элементов.

Создание связей через кастомные мета-поля и ACF

Если вам не подходит Posts 2 Posts или вы хотите более современный и поддерживаемый способ, используйте плагин Advanced Custom Fields (ACF). С помощью поля «Связь» (Relationship) можно выбирать связанные записи прямо в админке.

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

Настройка связи в ACF

В админке ACF создайте группу полей для нужного типа записи. Добавьте поле Relationship, в настройках укажите типы записей, которые можно выбирать.

Например, для поста можно добавить поле «Связанные проекты», которое позволит выбирать несколько записей типа «project».

Вывод связанных записей в шаблоне

function wplinks_show_related_projects_acf() {
    $projects = get_field('related_projects'); // ключ поля из ACF
    if ( $projects ) {
        echo '<ul>';
        foreach ( $projects as $project ) {
            echo '<li><a href="' . get_permalink($project->ID) . '">' . get_the_title($project->ID) . '</a></li>';
        }
        echo '</ul>';
    }
}

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

Динамические связи на основе таксономий и пользовательских запросов

Иногда достаточно использовать таксономии, чтобы связать записи по общим терминам (например, категориям, тегам или кастомным таксономиям). При этом связи будут динамическими и не требуют ручного ввода.

Например, вывод связанных записей, которые имеют ту же категорию:

function wplinks_show_related_by_category() {
    global $post;
    $categories = wp_get_post_categories( $post->ID );

    if ( ! empty( $categories ) ) {
        $args = array(
            'category__in' => $categories,
            'post__not_in' => array( $post->ID ),
            'posts_per_page' => 5
        );
        $related = new WP_Query( $args );

        if ( $related->have_posts() ) {
            echo '<ul>';
            while ( $related->have_posts() ) {
                $related->the_post();
                echo '<li><a href="' . get_permalink() . '">' . get_the_title() . '</a></li>';
            }
            echo '</ul>';
        }
        wp_reset_postdata();
    }
}

Однако такой способ менее гибкий — нет явных связей, только общие таксономии.

Реализация кастомных связей через пользовательские таблицы

Для сайтов с большим объемом данных и сложными связями можно создавать отдельные таблицы в базе данных для хранения связей между записями. Это повышает производительность и дает полный контроль.

Для работы с такими таблицами можно использовать стандартные WPDB методы, например:

global $wpdb;
$table_name = $wpdb->prefix . 'wplinks_connections';

// Создание таблицы (один раз)
function wplinks_create_links_table() {
    global $wpdb;
    $table_name = $wpdb->prefix . 'wplinks_connections';
    $charset_collate = $wpdb->get_charset_collate();

    $sql = "CREATE TABLE $table_name (
      id bigint(20) unsigned NOT NULL AUTO_INCREMENT,
      post_from bigint(20) unsigned NOT NULL,
      post_to bigint(20) unsigned NOT NULL,
      PRIMARY KEY  (id),
      KEY post_from (post_from),
      KEY post_to (post_to)
    ) $charset_collate;";

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

// Добавление связи
function wplinks_add_connection($from, $to) {
    global $wpdb;
    $table_name = $wpdb->prefix . 'wplinks_connections';
    $wpdb->insert( $table_name, array(
        'post_from' => $from,
        'post_to' => $to
    ) );
}

// Получение связанных записей
function wplinks_get_connections($post_id) {
    global $wpdb;
    $table_name = $wpdb->prefix . 'wplinks_connections';
    $results = $wpdb->get_col( $wpdb->prepare(
        "SELECT post_to FROM $table_name WHERE post_from = %d",
        $post_id
    ) );
    return $results;
}

Такой подход требует знаний SQL и аккуратности, но отлично подходит для сложных проектов.

Полезные плагины для управления внутренними ссылками и связями

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

  • Clearfy Pro — инструмент для оптимизации и управления ссылками на WordPress.
  • WPRemark — плагин для управления комментариями и внутренними ссылками.

Эти плагины помогут дополнительно улучшить внутреннюю структуру сайта и упростить работу с ссылками.

Выводы и рекомендации по созданию динамических связей

При выборе способа создания связей ориентируйтесь на задачи и масштаб проекта. Для простых случаев подойдет ACF или таксономии, для более продвинутых — Posts 2 Posts или кастомные таблицы.

Обязательно продумывайте, как пользователи будут управлять связями и как они должны отображаться на сайте. Тестируйте производительность и удобство админки.

И не забывайте о SEO — грамотная внутренняя перелинковка повышает видимость сайта и улучшает поведенческие факторы.

×

AI-плагин от WPShop.ru

анализирует конкурентов

пишет статьи

готовит SEO

генерирует изображения

и еще кое-что...
WPGPT
Плагин, который наполняет ваш сайт WordPress
Узнать больше