ฉันจะสร้างความสัมพันธ์ระหว่างประเภทโพสต์ที่กำหนดเองได้อย่างไร


16

ฉันต้องการสร้างฐานข้อมูลซีรี่ส์ทีวีโดยใช้ WordPress ฉันได้ปฏิบัติตามบทเรียนบางอย่างและฉันมีสองประเภทโพสต์ที่กำหนดเอง: หนึ่งสำหรับหนึ่งและmovies seriesผมทำตามโพสต์นี้สำหรับโครงสร้าง

คำถามของฉันคือฉันจะสร้างความสัมพันธ์ระหว่างภาพยนตร์และประเภทโพสต์ซีรีส์ได้อย่างไร


ก่อนอื่นคุณไม่ได้สร้างฐานข้อมูลทั้งหมดคุณเพียงแค่สร้างประเภทโพสต์ที่กำหนดเองของ WordPress และภายในขอบเขตของ WordPress คุณมีโอกาสมากมายในการจัดหมวดหมู่เรียงลำดับ ฯลฯ และทั้งหมดนั้นทำด้วยความสัมพันธ์ภายในที่ดี ดังนั้นความสัมพันธ์ที่คุณกำลังพูดถึงมีอยู่แล้วคุณเพียงแค่ต้องนำไปใช้ในแบบที่คุณต้องการ ดังนั้นฉันขอแนะนำให้คุณใช้ post_type ตามที่แนะนำแล้วแก้ไขคำถามด้วยคำค้นหาจริงของคุณ
Mayeenul Islam

@MayeenulIslam "implement the post_type as directed"คุณหมายถึงอะไร
CoalaArmy

ตามที่ระบุไว้ใน link-thread ที่คุณระบุหรือโดยใช้ตัวสร้างแบบง่ายเช่น: ตัวสร้างโพสต์ประเภทนี้
Mayeenul Islam

@MayeenulIslam: ฉันไม่เชื่อว่า "ความสัมพันธ์ที่คุณพูดถึงมีอยู่แล้ว" ตามค่าเริ่มต้นจะไม่มีความสัมพันธ์โดยตรงระหว่างโพสต์ประเภทต่างๆ
s_ha_dum

@s_ha_dum ขออภัยฉันพลาดคำถามบางส่วนที่เขาบอกไปแล้วว่าเขามี post_type สองอัน มันเป็นความผิดพลาดของฉัน ฉันพยายามทำให้เขาชี้แจงรายละเอียดของเขา ฉันพลาดที่รายละเอียดอยู่ที่นั่นแล้ว :( ฉันกำลังพูดถึงความสัมพันธ์ภายในของอนุกรมวิธานและโพสต์แบบกำหนดเองถ้ากำหนดไว้
Mayeenul Islam

คำตอบ:


22

ใช้ปลั๊กอิน

ปลั๊กอินที่ดีมากสำหรับความสัมพันธ์:

การใช้ 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'] ) );

}

จากนั้นหากต้องการรับความสัมพันธ์ของภาพยนตร์เป็นรายการสำหรับบทความชุด:

$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
ฉันชอบความคิดของเมท็อกซ์ (พยายามหลีกเลี่ยงปลั๊กอิน)!
CoalaArmy

ถ้าไม่มีการสร้างโพสต์อื่นเราสามารถเพิ่มวิธีนี้ในการสร้างลิงก์จากความสัมพันธ์พ่อแม่ / ลูกนี้ได้หรือไม่? ตัวอย่างเช่น: http://domain.com/series-name/movie-name?
Xtremefaith

@ Xtremefaith สามารถทำได้ด้วยรหัสอื่น มีปลั๊กอินที่ฉันสร้างขึ้นสำหรับหมวดหมู่ บางทีคุณอาจใช้เป็นข้อมูลอ้างอิง wordpress.org/plugins/hierarchical-urls
vmassuchetto

5

ฉันแนะนำปลั๊กอินโพสต์ 2 โพสต์ซึ่งฉันเพิ่งเริ่มใช้งาน

จะช่วยให้คุณสร้างความสัมพันธ์ที่หลายต่อหลายคนระหว่างเสาและประเภทหน้าซึ่งหมายความว่าคุณสามารถเชื่อมโยงmoviesไปยังseriesและ CPTs อื่น ๆ ที่คุณอาจจะสร้าง

ปลั๊กอินนี้ยังช่วยให้คุณสร้างข้อมูลเมตาการเชื่อมต่อซึ่งจะช่วยให้คุณได้รับรายละเอียดปลีกย่อยเมื่อสร้างการเชื่อมต่อของคุณ มีความยืดหยุ่นในการใช้งานช่วยให้สามารถควบคุม metaboxes ของผู้ดูแลระบบประเภทการเชื่อมต่อและวิธีแสดงการเชื่อมต่อของคุณที่ส่วนหน้า สุดท้ายมันเป็นเอกสารที่ดี


ฉันจะดูมัน
CoalaArmy

ฉันกำลังมองหา sth ที่คล้ายกันและพยายามแก้ปัญหาต่าง ๆ ฉันต้องบอกว่าอันนี้ (โพสต์ 2 โพสต์) สมบูรณ์แบบมันอาจไม่ใช่สิ่งที่ 'ไม่ใช่โปรแกรมเมอร์' จะมองหา แต่ถ้าคุณกำลังมองหา sth มากขึ้น เช่นเดียวกับห้องสมุดที่จะใช้ในเทมเพลตของคุณกว่านี้เป็นเพียงที่สมบูรณ์แบบเอกสารที่ดีบูรณาการได้รับมัน! ;)
Larzan

ฉันทำปลั๊กอินเล็ก ๆ สำหรับการโพสต์ความสัมพันธ์ แต่wordpress.org/plugins/softmixt-relations
Softmixt

2

น่าเสียดายที่ปลั๊กอินโพสต์ 2 โพสต์เลิกใช้แล้วและไม่ได้รับการดูแลรักษาอีกต่อไป มีปลั๊กอินตัวเลือกใหม่สำหรับความสัมพันธ์ MBนั้น มันเป็นแรงบันดาลใจจาก P2P และให้ API ที่คล้ายกันเพื่อสร้างความสัมพันธ์ระหว่างโพสต์คำศัพท์และผู้ใช้

ความสัมพันธ์แบบ MB สนับสนุนความสัมพันธ์แบบสองทิศทางตามค่าเริ่มต้นและใช้ตารางที่กำหนดเองเพื่อจัดเก็บความสัมพันธ์ (เช่น P2P) เพื่อประสิทธิภาพที่ดีขึ้น (กว่าเมตาโพสต์)

มันคุ้มค่าที่จะดูปลั๊กอิน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.