Cum creez o relație între două tipuri de postări personalizate?

5 ian. 2014, 14:30:56
Vizualizări: 49.3K
Voturi: 19

Vreau să construiesc o bază de date pentru seriale TV folosind WordPress. Am urmat câteva tutoriale și am două tipuri de postări personalizate: unul pentru movies, unul pentru series. Am urmat această postare pentru structură.

Întrebarea mea este: cum pot face relația între tipurile de postări pentru filme și seriale?

5
Comentarii

În primul rând, tu NU creezi o întreagă bază de date, ci doar un Tip de Postare Personalizat în WordPress. În cadrul WordPress, ai multe opțiuni pentru a le categorisi, sorta etc. Și toate acestea sunt realizate cu o bună relaționare internă. Deci, relația despre care vorbești este deja acolo, trebuie doar să o implementezi în modul de care ai nevoie. Așadar, aș sugera să implementezi post_type așa cum este indicat, iar apoi să editezi întrebarea cu adevărata ta interogare.

Mayeenul Islam Mayeenul Islam
5 ian. 2014 14:53:29

@MayeenulIslam, "implement the post_type as directed" la ce te referi?

CoalaArmy CoalaArmy
5 ian. 2014 14:59:34

Așa cum este indicat în link-ul tău furnizat, sau folosind un simplu generator precum: acest Generator de Tipuri de Postare.

Mayeenul Islam Mayeenul Islam
5 ian. 2014 15:03:47

@MayeenulIslam : Nu sunt convins că "relația despre care vorbești este deja acolo". În mod implicit, nu există o relație directă între diferite tipuri de postări.

s_ha_dum s_ha_dum
5 ian. 2014 17:07:52

@s_ha_dum Îmi cer scuze, am ratat o parte din întrebarea lui unde a menționat deja că are două post_types. Este greșeala mea. Încercam să-l ajut să clarifice cu mai multe detalii. Am ratat faptul că detaliile erau deja acolo. :( Vorbeam despre relația internă dintre taxonomie și custom post type dacă este definită.

Mayeenul Islam Mayeenul Islam
5 ian. 2014 17:52:11
Toate răspunsurile la întrebare 3
3
30

Folosirea unui Plugin

Câteva pluginuri foarte bune pentru relații:

Folosirea unei Metabox

Puteți construi o relație simplă folosind metabox-uri:

add_action( 'admin_init', 'add_meta_boxes' );
function add_meta_boxes() {
    add_meta_box( 'some_metabox', 'Relația Filme', 'movies_field', 'series' );
}

function movies_field() {
    global $post;
    $selected_movies = get_post_meta( $post->ID, '_movies', true );
    $all_movies = get_posts( array(
        'post_type' => 'movies',
        'numberposts' => -1,
        'orderby' => 'post_title',
        'order' => 'ASC'
    ) );
    ?>
    <input type="hidden" name="movies_nonce" value="<?php echo wp_create_nonce( basename( __FILE__ ) ); ?>" />
    <table class="form-table">
    <tr valign="top"><th scope="row">
    <label for="movies">Filme</label></th>
    <td><select multiple name="movies">
    <?php foreach ( $all_movies as $movie ) : ?>
        <option value="<?php echo $movie->ID; ?>"<?php echo (in_array( $movie->ID, $selected_movies )) ? ' selected="selected"' : ''; ?>><?php echo $movie->post_title; ?></option>
    <?php endforeach; ?>
    </select></td></tr>
    </table>
    <?php
}

add_action( 'save_post', 'save_movie_field' );
function save_movie_field( $post_id ) {

    // rulează doar pentru serii
    if ( 'series' != get_post_type( $post_id ) )
        return $post_id;        

    // verifică nonce
    if ( empty( $_POST['movies_nonce'] ) || !wp_verify_nonce( $_POST['movies_nonce'], basename( __FILE__ ) ) )
        return $post_id;

    // verifică autosave
    if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE )
        return $post_id;

    // verifică permisiunile
    if ( !current_user_can( 'edit_post', $post_id ) )
        return $post_id;

    // salvează
    update_post_meta( $post_id, '_movies', array_map( 'intval', $_POST['movies'] ) );

}

Apoi, pentru a obține relația filmelor ca listă pentru postările de tip serie:

$series = new WP_Query( array(
    'post_type' => 'movies',
    'post__in' => get_post_meta( $series_id, '_movies', true ),
    'nopaging' => true
) );

if ( $series->have_posts() ) { while ( $series->have_posts() ) {
    $series->the_post();
    ?>
    <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
    <?php
} }
5 ian. 2014 15:02:12
Comentarii

Îmi place ideea cu metabox-urile (încerc să evit plugin-urile)!

CoalaArmy CoalaArmy
5 ian. 2014 15:16:18

Fără a crea un alt articol, putem adăuga aici cum să creăm un permalink din această relație părinte/copil? De exemplu: http://domain.com/nume-serie/nume-film?

Xtremefaith Xtremefaith
8 apr. 2015 08:23:14

@Xtremefaith acest lucru poate fi realizat cu alt cod. Există un plugin pe care l-am creat pentru categorii. Poate îl poți folosi ca referință. https://wordpress.org/plugins/hierarchical-urls/

vmassuchetto vmassuchetto
7 aug. 2016 14:38:47
3

Recomand pluginul Posts 2 Posts, pe care tocmai am început să-l folosesc.

Acesta vă permite să creați relații many-to-many între postări și tipuri de pagini, ceea ce înseamnă că puteți lega movies de series, și orice alte CPT-uri pe care le-ați putea crea.

Acest plugin vă permite, de asemenea, să creați metadate de conexiune care vă vor permite să obțineți detalii mai fine atunci când creați conexiunile. Este destul de flexibil în utilizare, permițând control asupra metabox-urilor din admin, tipurilor de conexiuni și modalităților de afișare a conexiunilor pe frontend. În cele din urmă, este bine documentat.

5 ian. 2014 14:55:45
Comentarii

O să mă uit la asta.

CoalaArmy CoalaArmy
5 ian. 2014 14:58:19

Căutam ceva similar și am încercat diverse soluții. Trebuie să spun că aceasta (Post 2 Post) a fost perfectă, poate nu este exact ceea ce și-ar dori un 'non-programator', dar dacă cauți mai degrabă ceva asemănător unei biblioteci de utilizat în template-ul tău, atunci este pur și simplu perfectă, bine documentată, bine integrată, ia-o! ;)

Larzan Larzan
18 dec. 2014 19:59:55

Am făcut un mic plugin pentru relații între postări dar https://wordpress.org/plugins/softmixt-relations

Softmixt Softmixt
4 iul. 2017 10:37:46
0

Din păcate, plugin-ul Posts 2 Posts este învechit și nu mai este întreținut. Există un nou plugin alternativ pentru aceasta MB Relationships. Este inspirat de P2P și oferă un API similar pentru a crea relații între articole, termeni și utilizatori.

MB Relationships suportă relații bidirecționale în mod implicit și utilizează o tabelă personalizată pentru a stoca relațiile (ca P2P) pentru o performanță mai bună (decât meta postările).

Merită să aruncați o privire asupra acestui plugin.

29 ian. 2018 05:18:10