Come creare una relazione tra due tipi di post personalizzati?

5 gen 2014, 14:30:56
Visualizzazioni: 49.3K
Voti: 19

Voglio costruire un database di serie TV utilizzando WordPress. Ho seguito alcuni tutorial e ho due tipi di post personalizzati: uno per movies e uno per series. Ho seguito questo post per la struttura.

La mia domanda è: come posso creare la relazione tra i tipi di post movies e series?

5
Commenti

Prima di tutto, NON stai creando un intero database, stai solo creando un Custom Post Type di WordPress. E nell'ambito di WordPress hai molte opportunità per categorizzarli, ordinarli ecc. E tutto questo viene fatto con una buona relazione interna. Quindi, la relazione di cui parli è già presente, devi solo implementarla nel modo di cui hai bisogno. Quindi, ti suggerirei di implementare il post_type come indicato, e poi modificare la domanda con la tua vera richiesta.

Mayeenul Islam Mayeenul Islam
5 gen 2014 14:53:29

@MayeenulIslam, "implement the post_type as directed" cosa intendi?

CoalaArmy CoalaArmy
5 gen 2014 14:59:34

Come indicato nel thread del link che hai fornito, o utilizzando un generatore semplice come: questo Post Type Generator.

Mayeenul Islam Mayeenul Islam
5 gen 2014 15:03:47

@MayeenulIslam : Non sono convinto che "la relazione di cui stai parlando sia già presente". Di default, non c'è una relazione diretta tra diversi tipi di post.

s_ha_dum s_ha_dum
5 gen 2014 17:07:52

@s_ha_dum Scusa, ho perso una parte della sua domanda in cui aveva già detto di avere due post_types. È stato un mio errore. Stavo cercando di fargli chiarire con maggiori dettagli. Mi è sfuggito che i dettagli erano già presenti. :( Parlavo della relazione interna tra tassonomia e custom post type se definita.

Mayeenul Islam Mayeenul Islam
5 gen 2014 17:52:11
Tutte le risposte alla domanda 3
3
30

Utilizzo di un Plugin

Alcuni ottimi plugin per gestire le relazioni:

Utilizzo di un Metabox

Puoi creare una semplice relazione utilizzando i metabox:

add_action( 'admin_init', 'add_meta_boxes' );
function add_meta_boxes() {
    add_meta_box( 'some_metabox', 'Relazione Film', '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">Film</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>
}

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

    // esegui solo per i post di tipo series
    if ( 'series' != get_post_type( $post_id ) )
        return $post_id;        

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

    // controlla l'autosalvataggio
    if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE )
        return $post_id;

    // controlla i permessi
    if ( !current_user_can( 'edit_post', $post_id ) )
        return $post_id;

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

}

E poi, per ottenere la relazione dei film come lista per i post di tipo series:

$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 gen 2014 15:02:12
Commenti

Mi piace l'idea delle metabox (per cercare di evitare i plugin)!

CoalaArmy CoalaArmy
5 gen 2014 15:16:18

Senza creare un altro post, possiamo aggiungere qui come creare un permalink da questa relazione genitore/figlio? Ad esempio: http://domain.com/nome-serie/nome-film?

Xtremefaith Xtremefaith
8 apr 2015 08:23:14

@Xtremefaith questo può essere fatto con altro codice. C'è un plugin che ho creato per le categorie. Forse puoi usarlo come riferimento. https://wordpress.org/plugins/hierarchical-urls/

vmassuchetto vmassuchetto
7 ago 2016 14:38:47
3

Consiglio il plugin Posts 2 Posts, che ho appena iniziato a utilizzare.

Ti permette di creare relazioni molti-a-molti tra post e tipi di pagina, il che significa che puoi collegare movies a series, e qualsiasi altro CPT (Custom Post Type) che potresti creare.

Questo plugin ti consente anche di creare metadati di connessione che ti permetteranno di ottenere maggiori dettagli quando crei le tue connessioni. È abbastanza flessibile nel suo utilizzo, consentendo il controllo su metabox nell'amministrazione, tipi di connessione e modi per visualizzare le tue connessioni sul front end. Infine, è ben documentato.

5 gen 2014 14:55:45
Commenti

Ci darò un'occhiata.

CoalaArmy CoalaArmy
5 gen 2014 14:58:19

Stavo cercando qualcosa di simile e ho provato varie soluzioni. Devo dire che questa (Post 2 Post) era perfetta, potrebbe non essere ciò che un 'non-programmatore' cercherebbe, ma se stai cercando più qualcosa come una libreria da usare nel tuo template, allora è semplicemente perfetta, ben documentata, ben integrata, prendila! ;)

Larzan Larzan
18 dic 2014 19:59:55

Ho creato un piccolo plugin per le relazioni tra post ma https://wordpress.org/plugins/softmixt-relations

Softmixt Softmixt
4 lug 2017 10:37:46
0

Sfortunatamente, il plugin Posts 2 Posts è deprecato e non più mantenuto. Esiste una nuova alternativa per questo scopo: MB Relationships. È ispirato a P2P e fornisce un'API simile per creare relazioni tra articoli, termini e utenti.

MB Relationships supporta relazioni bidirezionali per impostazione predefinita e utilizza una tabella personalizzata per memorizzare le relazioni (come P2P) per una migliore performance (rispetto ai post meta).

Vale la pena dare un'occhiata a questo plugin.

29 gen 2018 05:18:10