Bagaimana cara membuat hubungan antara dua jenis pos khusus?


16

Saya ingin membangun basis data serial TV menggunakan WordPress. Saya telah mengikuti beberapa tutorial dan saya memiliki dua jenis posting khusus: satu untuk movies, satu untuk dan series. Saya mengikuti pos ini untuk struktur .

Pertanyaan saya adalah: bagaimana saya bisa membuat hubungan antara film dan jenis posting seri?


Pertama-tama, Anda TIDAK membuat keseluruhan database, Anda hanya membuat Jenis Posting Kustom WordPress. Dan dalam lingkup WordPress Anda memiliki banyak peluang untuk mengkategorikannya, menyortirnya, dll. Dan semuanya dilakukan dengan hubungan internal yang baik. Jadi, hubungan apa yang Anda bicarakan sudah ada di sana, Anda hanya perlu menerapkannya dengan cara yang Anda butuhkan. Jadi, saya akan menyarankan Anda untuk menerapkan post_type seperti yang diarahkan, dan kemudian mengedit pertanyaan dengan permintaan Anda yang sebenarnya.
Mayeenul Islam

@ MayeenulIslam, "implement the post_type as directed"apa maksudmu?
CoalaArmy

Seperti yang diarahkan pada tautan-utas yang Anda berikan , atau dengan menggunakan generator sederhana seperti: Generator Jenis Pos ini .
Mayeenul Islam

@MayeenulIslam: Saya tidak yakin bahwa "hubungan yang Anda bicarakan sudah ada di sana". Secara default, tidak ada hubungan langsung antara berbagai jenis posting.
s_ha_dum

@ s_ha_dum Maaf, saya melewatkan beberapa bagian dari pertanyaannya di mana dia sudah mengatakan bahwa dia memiliki dua post_types. Ini kesalahan saya. Saya mencoba membuatnya menjelaskan dengan detailnya. Saya rindu bahwa detailnya sudah ada di sana. :( Saya berbicara tentang hubungan dalam jenis taksonomi dan pos kustom jika ditentukan.
Mayeenul Islam

Jawaban:


22

Menggunakan Plugin

Beberapa plugin yang sangat bagus untuk hubungan:

Menggunakan Metabox

Anda dapat membangun hubungan sederhana menggunakan metabox:

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

    // only run this for series
    if ( 'series' != get_post_type( $post_id ) )
        return $post_id;        

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

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

    // check permissions
    if ( !current_user_can( 'edit_post', $post_id ) )
        return $post_id;

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

}

Dan kemudian, untuk mendapatkan hubungan film sebagai daftar untuk posting seri:

$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
} }

3
Saya suka ide dengan metabox (mencoba menghindari plugin)!
CoalaArmy

Tanpa membuat posting lain, dapatkah kita menambahkan ini cara membuat permalink dari hubungan orang tua / anak ini? Sebagai contoh: http://domain.com/series-name/movie-name?
Xtremefaith

@ Xtremefaith ini bisa dilakukan dengan kode lain. Ada plugin yang saya buat untuk kategori. Mungkin Anda bisa menggunakannya sebagai referensi. wordpress.org/plugins/hierarchical-urls
vmassuchetto

5

Saya merekomendasikan plugin Posts 2 Posts , yang baru saja saya mulai gunakan.

Ini memungkinkan Anda untuk membuat banyak-ke-banyak hubungan antara posting dan jenis halaman, artinya Anda dapat menautkan movieske series, dan CPT lain yang Anda buat.

Plugin ini juga memungkinkan Anda membuat metadata koneksi yang memungkinkan Anda mendapatkan detail yang lebih baik saat membuat koneksi. Ini cukup fleksibel dalam penggunaannya, memungkinkan untuk mengontrol metabox admin, jenis koneksi, dan cara untuk menampilkan koneksi Anda di ujung depan. Terakhir, didokumentasikan dengan baik .


Saya akan melihatnya.
CoalaArmy

Saya mencari sth. serupa dan mencoba berbagai solusi. Saya harus mengatakan bahwa yang ini (Post 2 Post) sempurna, mungkin bukan yang dicari oleh 'non-programmer', tetapi jika Anda mencari lebih banyak untuk sth. seperti perpustakaan untuk digunakan dalam template Anda, selain ini sempurna, didokumentasikan dengan baik, terintegrasi dengan baik, mengerti! ;)
Larzan

Saya melakukan plugin kecil untuk hubungan postingan tetapi wordpress.org/plugins/softmixt-relations
Softmixt

2

Sayangnya, plugin Posting 2 Posting sudah usang dan tidak lagi dipertahankan. Ada plugin alternatif baru untuk Hubungan MB itu . Ini terinspirasi oleh P2P dan menyediakan API serupa untuk membuat hubungan antara posting, istilah, dan pengguna.

MB Relationships mendukung hubungan dua arah secara default dan menggunakan tabel khusus untuk menyimpan hubungan (seperti P2P) untuk kinerja yang lebih baik (daripada posting meta).

Ada baiknya melihat plugin.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.