Jak tworzyć relacje między postami w WordPress (powiązane treści, relacje 1-do-1 i 1-do-wielu)

WordPress pozwala łatwo tworzyć i zarządzać różnymi typami treści – wpisami, stronami, produktami, wydarzeniami czy projektami.
Czasem jednak chcesz połączyć te treści między sobą – np. powiązać autora z jego książkami, wydarzenie z lokalizacją, albo artykuł z podobnymi wpisami.

W tym poradniku pokażę Ci trzy podejścia do tworzenia relacji między postami:

  1. Za pomocą metadanych (post meta),
  2. Za pomocą wtyczki Advanced Custom Fields (ACF),
  3. Za pomocą własnej tabeli w bazie danych — dla bardziej złożonych struktur.

Czym są relacje między postami?

Relacja między postami to po prostu powiązanie dwóch lub więcej wpisów (postów, produktów, wydarzeń itd.).
Najczęstsze typy relacji to:

  • Relacja 1-do-1 → np. jeden autor ma jedno bio (stronę profilu),
  • Relacja 1-do-wielu → np. jeden autor ma wiele artykułów,
  • Relacja wiele-do-wielu → np. jeden produkt może być powiązany z wieloma akcesoriami, i odwrotnie.

Krok 1: Relacje za pomocą metadanych (post_meta)

Najprostszy sposób – zapis ID powiązanego posta w meta polu.

// Dodanie relacji (np. do powiązanego wpisu)
update_post_meta( $post_id, '_related_post', $related_post_id );

// Odczyt relacji
$related = get_post_meta( $post_id, '_related_post', true );

// Wyświetlenie tytułu powiązanego wpisu
if ( $related ) {
    echo '<p>Powiązany wpis: <a href="' . get_permalink( $related ) . '">' . get_the_title( $related ) . '</a></p>';
}

Zalety:

  • Proste do wdrożenia,
  • Nie wymaga żadnych wtyczek.

⚠️ Wady:

  • Trudniejsze do przeszukiwania (brak relacji odwrotnej),
  • Sprawdza się tylko w prostych przypadkach (np. 1-do-1).

Krok 2: Relacje 1-do-wielu (lista powiązanych postów)

Aby powiązać wiele wpisów z jednym postem, możesz zapisać listę ID-ków jako tablicę:

// Zapis wielu relacji
update_post_meta( $post_id, '_related_posts', [ 45, 56, 72 ] );

// Pobranie i wyświetlenie
$related_posts = get_post_meta( $post_id, '_related_posts', true );

if ( $related_posts && is_array( $related_posts ) ) {
    echo '<h3>Powiązane wpisy:</h3><ul>';
    foreach ( $related_posts as $rel_id ) {
        echo '<li><a href="' . get_permalink( $rel_id ) . '">' . get_the_title( $rel_id ) . '</a></li>';
    }
    echo '</ul>';
}

Możesz też dodać prosty interfejs w edytorze WordPress (np. za pomocą ACF lub CMB2) i pozwolić administratorowi wybierać powiązane wpisy z listy.


Krok 3: Relacje za pomocą Advanced Custom Fields (ACF)

Jeśli korzystasz z ACF, sprawa jest jeszcze prostsza.
Wystarczy dodać pole typu „Relacja” (Relationship Field) i przypisać je do wybranego typu posta.

Następnie w szablonie możesz użyć:

$related = get_field( 'related_posts' );

if ( $related ) {
    echo '<h3>Powiązane wpisy:</h3><ul>';
    foreach ( $related as $post ) {
        echo '<li><a href="' . get_permalink( $post->ID ) . '">' . get_the_title( $post->ID ) . '</a></li>';
    }
    echo '</ul>';
}

ACF sam zajmuje się przechowywaniem i aktualizacją danych, więc to najprostszy sposób na relacje 1-do-wielu.


Krok 4: Relacje wiele-do-wielu (zaawansowane)

W przypadku dużych projektów (np. portali lub katalogów) warto stworzyć własną tabelę relacji.

Przykład tworzenia tabeli:

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

$wpdb->query("
    CREATE TABLE IF NOT EXISTS $table_name (
        id bigint(20) unsigned NOT NULL AUTO_INCREMENT,
        post_id bigint(20) unsigned NOT NULL,
        related_id bigint(20) unsigned NOT NULL,
        relation_type varchar(50) DEFAULT '',
        PRIMARY KEY  (id)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
");

Dodawanie relacji:

$wpdb->insert( 
    $table_name, 
    [ 
        'post_id' => 12, 
        'related_id' => 24, 
        'relation_type' => 'powiązane' 
    ] 
);

Pobieranie relacji:

$related_ids = $wpdb->get_col( 
    $wpdb->prepare( 
        "SELECT related_id FROM $table_name WHERE post_id = %d", 
        12 
    ) 
);

Takie rozwiązanie pozwala tworzyć złożone struktury danych, które można łatwo przeszukiwać i filtrować w zapytaniach SQL.


Kiedy które rozwiązanie wybrać?

Cel / ZastosowanieNajlepsze rozwiązanie
Prosta relacja 1-do-1post_meta
Relacja 1-do-wieluACF lub post_meta (tablica ID)
Relacja wiele-do-wielu (duże projekty)Własna tabela

Podsumowanie

Tworzenie relacji między postami w WordPressie daje ogromne możliwości — od prostych powiązań treści, po skomplikowane bazy danych.
Dzięki kilku linijkom kodu (lub ACF) możesz połączyć wpisy, produkty czy wydarzenia w logiczne zestawy, zwiększając wartość i użyteczność swojej strony.

KROK 1 Z 4

Z CZYM POTRZEBUJESZ POMOCY?