İki özel gönderi türü arasında nasıl ilişki oluştururum?


16

WordPress kullanarak bir TV dizisi veritabanı oluşturmak istiyorum. Bazı öğreticiler izledim ve iki özel yazı türü var: biri için movies, biri için ve series. Bu görevi yapı için takip ettim .

Sorum şu: Filmler ve dizi yazı tipleri arasındaki ilişkiyi nasıl kurabilirim?


Her şeyden önce, sen edilir oluştururken DEĞİL bir bütün veritabanı, sadece bir WordPress' Özel Mesaj Tipi yaratıyor. Ve WordPress kapsamında onları kategorize etmek, sıralamak vb. Birçok fırsata sahipsiniz. Ve hepsi iyi bir iç ilişkiyle yapılır. Yani, bahsettiğiniz ilişki zaten orada, sadece ihtiyacınız olan şekilde uygulamanız gerekiyor. Bu nedenle, post_type'i yönlendirildiği gibi uygulamanızı ve ardından sorguyu gerçek sorgunuzla düzenlemenizi öneririm.
Mayeenul Islam

@MayeenulIslam, "implement the post_type as directed"ne demek istiyorsun?
CoalaArmy

Sağladığınız bağlantı dizisinde belirtildiği gibi veya bu Post Type Generator gibi basit bir jeneratör kullanarak .
Mayeenul Islam

@MayeenulIslam: "Bahsettiğiniz ilişkinin zaten orada olduğuna" inanmıyorum. Varsayılan olarak, farklı gönderi türleri arasında doğrudan bir ilişki yoktur.
s_ha_dum

@s_ha_dum Özür dilerim, sorusunun bir kısmını kaçırdım ve burada iki post_types olduğunu söyledi. Benim hatam. Ayrıntılarıyla açıklığa kavuşturmaya çalışıyorum. Detayın zaten orada olduğunu kaçırdım. :( Tanımlandıysa, sınıflandırma ve özel yazı türünün iç ilişkisinden söz ediyorum
Mayeenul Islam

Yanıtlar:


22

Eklenti Kullanma

İlişkiler için bazı çok iyi eklentiler:

Meta Kutu Kullanma

Meta kutuları kullanarak basit bir ilişki oluşturabilirsiniz:

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'] ) );

}

Ve sonra, film ilişkilerini dizi yayınları için bir liste olarak almak için:

$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
Ben metaboxes ile fikir gibi (eklentileri önlemek için çalışıyor)!
CoalaArmy

Başka bir yayın oluşturmadan, bu üst / alt ilişkiden nasıl kalıcı bağlantı oluşturulacağını ekleyebilir miyiz? Örneğin: http://domain.com/series-name/movie-name?
Xtremefaith

@Xtremefaith bu diğer kodlarla yapılabilir. Kategoriler için oluşturduğum bir eklenti var. Belki referans olarak kullanabilirsiniz. wordpress.org/plugins/hierarchical-urls
vmassuchetto

5

Kullanmaya yeni başladığım Mesajlar 2 Mesajlar eklentisini öneririm .

Bu size bağlayabilirsiniz yani mesajların ve sayfa türleri arasında çok-çok ilişkileri oluşturmanızı sağlar moviesiçin seriesve oluşturduğunuz herhangi bir başka CPT.

Bu eklenti , bağlantılarınızı oluştururken daha ince ayrıntılar elde etmenizi sağlayacak bağlantı meta verileri oluşturmanıza da olanak tanır . Kullanımı oldukça esnektir, yönetici meta kutuları, bağlantı türleri ve bağlantılarınızı ön uçta görüntüleme yolları üzerinde kontrol sağlar. Son olarak, iyi belgelenmiştir .


Ben bir göz atacağım.
CoalaArmy

Ben bir şey arıyordum. benzer ve denenmiş çeşitli çözümler. Bu bir (Post 2 Post) mükemmel olduğunu söylemek zorundayım, bir 'programcı olmayan' ne arıyor olabilir, ama sth için daha fazla arıyorsanız. şablonunuzda kullanmak için bir kütüphane gibi, bu sadece mükemmel, iyi belgelenmiş, iyi entegre edilmiş, olsun! ;)
Larzan

Post ilişkiler için küçük bir eklenti yaptım ama wordpress.org/plugins/softmixt-relations
Softmixt

2

Ne yazık ki, Mesajlar 2 Mesajlar eklentisi kullanımdan kaldırıldı ve artık korunmuyor. MB İlişkileri için yeni bir alternatif eklenti var . P2P'den esinlenmiştir ve yayınlar, terimler ve kullanıcılar arasında ilişkiler oluşturmak için benzer bir API sağlar.

MB İlişkileri, varsayılan olarak çift yönlü ilişkileri destekler ve daha iyi bir performans (post meta'dan daha iyi) elde etmek için ilişkileri (P2P gibi) depolamak için özel bir tablo kullanır.

Eklentiye bir göz atmaya değer.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.