विभिन्न CPT को एक साथ कैसे जोड़ा जाए?


11

मुझे उम्मीद है कि इस सवाल का यहाँ स्थान है।

मैंने हमेशा सोचा है कि अलग-अलग कस्टम पोस्ट प्रकारों को एक साथ जोड़ना एक सामान्य आवश्यकता है, जैसे कि कस्टम टैक्सोनॉमी उपयोग के लोकप्रिय ट्यूटोरियल उदाहरणों (पुस्तकों / लेखकों / शीर्षक, फिल्मों / अभिनेताओं / निर्देशकों, आदि) में। मैं व्यक्तिगत रूप से "पोस्ट 2 पोस्ट" का उपयोग करता हूं, लेकिन समर्थन बंद हो गया।

Google पर सबसे प्रासंगिक परिणाम अभी इस प्लगइन को इंगित करते हैं। कौन से दीर्घकालिक विकल्प मौजूद हैं? पी 2 पी प्लगइन समाप्त होने पर एक अनुभवी वर्डप्रेस वेब डेवलपर वर्डप्रेस के साथ एक पुस्तक / लेखक / शीर्षक प्रबंधन प्रणाली को डिजाइन करने के लिए क्या उपयोग करेगा?


कस्टम पोस्ट प्रकार बनाने के लिए आपने किस कोड का उपयोग किया था? आप इस कोड wordpress.stackexchange.com/a/128544/9884
ब्रैड डाल्टन

1
मुझे लगता है कि बड़ी संख्या में लोग अभी भी पी 2 पी का उपयोग करते हैं, इसलिए मैं इसे कभी भी विफल नहीं देख सकता क्योंकि कोई व्यक्ति केवल कांटा लगा सकता है और इसे मिथुन पर बनाए रख सकता है। अगर समर्थन छोड़ दिया गया है, लेकिन मुझे लगता है कि इसका मतलब है कि स्क्रिबु कुछ नया काम कर रहा है या कार्यक्षमता कोर में अपना रास्ता बना रही हो सकती है। मैं इसे उपयोग न करने के एक कारण के रूप में नहीं देखता।
sanchothefat

1
मैं इतना पक्का नहीं हूँ। P2P के पास WP प्लगइन्स पेज पर केवल 55,000 डाउनलोड हैं, जितना मैंने सोचा था कि उससे कम लोकप्रिय है। और मुझे समझ में नहीं आता है, फिर से क्योंकि सीपीटी को एक साथ जोड़ना मेरे लिए एक बहुत ही बुनियादी और सामान्य आवश्यकता की तरह लगता है। एक प्लगइन जो केवल कुछ मूल को संबोधित करता है वह केवल 55,000 डाउनलोड कैसे कर सकता है? वह मेरे पार है। एकमात्र स्पष्टीकरण यह है कि इसे संबोधित करने का एक और अच्छा तरीका है इसलिए मेरा प्रश्न।
ड्रेक ०३५

3
आप इस प्लगइन का उपयोग करना जारी रख सकते हैं और यदि प्लगइन किसी तरह से विफल होना चाहिए, तो आप रेपो को कांटा कर सकते हैं और इसे स्वयं बनाए रख सकते हैं: github.com/scribu/wp-posts-to-posts.git रेपो से उद्धरण:If you want to help maintain the plugin, fork it on github and open pull requests.
स्काउट Kay

4
इस सवाल को उकेरा और तारांकित किया क्योंकि मुझे लगता है कि वर्डप्रेस में HABTM वास्तव में दिलचस्प है। उस ने कहा, मैं बहुत दूर जा रहा प्लगइन पसीना नहीं होगा, मार्क Jaquith स्वेच्छा से यह जा रहा रखने में मदद करने के लिए है । और जबकि कुछ WP प्लग इन में 300000 डाउनलोड या कुछ भी हो सकता है, कई में 472 स्टार नहीं हैं। इसे जीवित रखने के लिए, वह संख्या जो मायने रखती है!
विल

जवाबों:


13

एक प्रोग्रामर के रूप में, मैं अपने पोस्ट प्रकारों को जोड़ने के लिए अपना कोड लिखना शुरू करूंगा। यह एक त्वरित तरीका नहीं है, यह आसान नहीं है, लेकिन यह बहुत मजेदार है।

पद के प्रकार

हम दो सरल पोस्ट प्रकार बनाकर शुरू करते हैं, Authorऔर Books:

add_action('init', 'p2p2_register_author');
add_action('init', 'p2p2_register_book');

function p2p2_register_author(){
    $labels = array(
        'name'               => 'Author',
        'singular_name'      => 'Author',
        'add_new'            => 'Add New',
        'add_new_item'       => 'Add New Author',
        'edit_item'          => 'Edit Author',
        'new_item'           => 'New Author',
        'all_items'          => 'All Authors',
        'view_item'          => 'View Authors',
        'search_items'       => 'Search Authors',
        'not_found'          => 'No authors found',
        'not_found_in_trash' => 'No authors found in Trash',
        'parent_item_colon'  => '',
        'menu_name'          => 'Authors'
    );

    register_post_type(
        'Author',
        array (
            'labels'             => $labels,
            'public'             => true,
            'publicly_queryable' => true,
            'show_ui'            => true,
            'show_in_menu'       => true,
            'query_var'          => true,
            'rewrite'            => array( 'slug' => 'author' ),
            'capability_type'    => 'post',
            'has_archive'        => true,
            'hierarchical'       => false,
            'menu_position'      => null,
            'supports'           => array( 'title', 'editor', 'author', 'thumbnail', 'excerpt', 'comments' )
        )
    );
}
function p2p2_register_book(){
    $labels = array(
        'name'               => 'Books',
        'singular_name'      => 'Book',
        'add_new'            => 'Add New',
        'add_new_item'       => 'Add New Book',
        'edit_item'          => 'Edit Book',
        'new_item'           => 'New Book',
        'all_items'          => 'All Books',
        'view_item'          => 'View Book',
        'search_items'       => 'Search Books',
        'not_found'          => 'No books found',
        'not_found_in_trash' => 'No books found in Trash',
        'parent_item_colon'  => '',
        'menu_name'          => 'Books'
    );

    register_post_type(
        'Book',
        array (
            'labels'             => $labels,
            'public'             => true,
            'publicly_queryable' => true,
            'show_ui'            => true,
            'show_in_menu'       => true,
            'query_var'          => true,
            'rewrite'            => array( 'slug' => 'book' ),
            'capability_type'    => 'post',
            'has_archive'        => true,
            'hierarchical'       => false,
            'menu_position'      => null,
            'supports'           => array( 'title', 'editor', 'author', 'thumbnail', 'excerpt', 'comments' )
        )
    );
}

वहां कुछ भी नहीं फैंसी। वास्तव में, यह कोडेक्स से है !

मेटाबॉक्स

चलिए अपने लेखक के लिए हमारी पुस्तक पोस्ट प्रकार के लिए एक मेटाबेस जोड़कर जारी रखें:

add_action('admin_init', 'p2p2_add_author_metabox');

function p2p2_add_author_metabox(){
    add_meta_box( 
        'book_author', 
        __('Book Author', 'bandpress'), 
        'p2p2_book_author_metabox', 
        'book', 
        'side', 
        'default', 
        array( 'id' => 'p2p2_author') 
    );
}

यहां आप एक कॉलबैक फ़ंक्शन देख सकते हैं p2p2_book_author_metaboxजो कि हमारे मेटाबॉक्स के अंदर होने जा रहा है।

मेटाबॉक्स की सामग्री

चलो समारोह बनाएँ:

function p2p2_book_author_metabox($post, $args){
    wp_nonce_field( plugin_basename( __FILE__ ), 'p2p2_book_author_nonce' );
    $author_id = get_post_meta($post->ID, 'p2p2_book_author', true);

    echo "<p>Select the author of the book</p>";
    echo "<select id='p2p2_book_author' name='p2p2_book_author'>";
    // Query the authors here
    $query = new WP_Query( 'post_type=author' );
    while ( $query->have_posts() ) {
        $query->the_post();
        $id = get_the_ID();
        $selected = "";

        if($id == $author_id){
            $selected = ' selected="selected"';
        }
        echo '<option' . $selected . ' value=' . $id . '>' . get_the_title() . '</option>';
    }
    echo "</select>";
}

यहां जहां जादू होता है। पहले हम लेखकों के लिए डेटाबेस को क्वेरी करने जा रहे हैं और फिर हम <select>अपने क्वेरी परिणामों के साथ भरते हैं । अधिक के बारे में कोडेक्स की जाँच करें WP_Query। अब आप अपनी पुस्तक पोस्ट प्रकार पर जा सकते हैं और अपनी ड्रॉपडाउन देख सकते हैं:

हमारे ड्रॉपडाउन

हमारी सामग्री को सहेजना

निश्चित रूप से हम अपने चयन को बचाना चाहते हैं, इसलिए हम एक और फ़ंक्शन जोड़ते हैं जो हमारे लिए मेटाबोक्स को बचाने जा रहा है:

add_action('save_post', 'p2p2_save_author_metabox', 1, 2);

function p2p2_save_author_metabox($post_id, $post){
    // Don't wanna save this now, right?
    if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE )
        return;
    if ( !isset( $_POST['p2p2_book_author_nonce'] ) )
        return;
    if ( !wp_verify_nonce( $_POST['p2p2_book_author_nonce'], plugin_basename( __FILE__ ) ) )
        return;

    // We do want to save? Ok!
    $key = 'p2p2_book_author';
    $value = $_POST["p2p2_book_author"];
    if ( get_post_meta( $post->ID, $key, FALSE ) ) { // If the custom field already has a value
        update_post_meta( $post->ID, $key, $value );
    } else { // If the custom field doesn't have a value
        add_post_meta( $post->ID, $key, $value );
    }
    if ( !$value ) delete_post_meta( $post->ID, $key ); // Delete if blank
}

अब जाओ और एक लेखक के साथ एक पुस्तक बचाओ! पुस्तक के लेखक को wp_postmetaडेटाबेस तालिका में सहेजा जाएगा और ड्रॉपडाउन का चयनित मान मेटा में होगा।

पुस्तक के लिए एक लेखक स्तंभ

आइए हमारी पुस्तकों के लिए व्यवस्थापक क्षेत्र का विस्तार करें। हम स्तंभों को बदलकर शुरू करेंगे:

add_filter('manage_edit-book_columns', 'p2p2_add_book_columns');

function p2p2_add_book_columns($columns){
    $new_columns['cb'] = '<input type="checkbox" />';

    $new_columns['title'] = _x('Title', 'column name', 'bandpress');

    $new_columns['p2p2_author'] = __('Author', 'bandpress');

    return $new_columns;
}

यह फ़ंक्शन सुनिश्चित करता है कि हम केवल कॉलम शीर्षक और P2p2_author देखें। वर्डप्रेस के मास एडिट कार्यक्षमता के लिए cb चेकबॉक्स कॉलम की आवश्यकता है। अब हमें अपने कॉलम में कुछ जानकारी जोड़ने की आवश्यकता है। हम इस फ़ंक्शन को जोड़ते हैं:

add_action('manage_book_posts_custom_column', 'p2p2_fill_book_columns', 10, 2);

function p2p2_fill_book_columns($column_name, $id) {
    global $wpdb;
    switch ($column_name) {
        case 'p2p2_author':
            $author_id = get_post_meta($id, 'p2p2_book_author', true);
            $author = get_post($author_id);
            $permalink = get_permalink($author_id);
            echo "<a href='" . $permalink . "'>" . $author->post_title . "</a>";
            break;
        default:
            break;
    } // end switch
}

स्विच आपके द्वारा पिछले फ़ंक्शन में जोड़े गए प्रत्येक कॉलम के लिए है। आप उसे दिखाना चाहते हैं, जिसे आप दिखाना चाहते हैं। हमें वह पद मिलता है जो हमारी पुस्तक का लेखक है और अपने 'प्रोफाइल पेज' पर एक अच्छा पर्मलिंक बनाता है। यह है जो ऐसा लग रहा है:

हमारे लेखक स्तंभ

जारी रहती है

हमने अपनी वर्डप्रेस साइट के बैकएंड में दो पोस्ट टाइप कनेक्ट किए हैं, लेकिन हम फ्रंटएंड में इसके बारे में नहीं देख सकते हैं। इसे पूरा करने के लिए बहुत अधिक काम करने की आवश्यकता होगी, लेकिन संभावनाएं कुछ अंतहीन हैं। हम:

  1. लेखक द्वारा पुस्तकों को क्रमबद्ध करें
  2. लेखक पृष्ठ पर पुस्तकों की एक सूची दिखाएं
  3. पुस्तक पृष्ठ पर लेखक की अन्य पुस्तकों की सूची दिखाएँ
  4. लेखक के चित्रों के साथ एक फैंसी मेटाबॉक्स बनाएं
  5. उन पुस्तकों के लिए लेखक व्यवस्थापक पृष्ठ में एक कॉलम बनाएँ, जो उसने लिखी थी
  6. और भी काफी...

मैं इस उत्तर पर काम करना जारी रखूंगा, क्योंकि मुझे स्वयं इस समाधान की आवश्यकता है। हालाँकि, मैं अभी इसके लिए काम करना बंद कर दूंगा। मैं इस उत्तर को कल अपडेट करना शुरू करूंगा।


अपना अद्भुत उत्तर साझा करने के लिए धन्यवाद। आप लेखक द्वारा लिखित पुस्तकों की सूची कैसे दिखाएंगे?
विलियम

4

मैं इसके बारे में बहुत ज्यादा चिंता नहीं करता, समर्थन जारी रखने के लिए महान डेवलपर्स के एक जोड़े के रूप में । हालाँकि, यदि आप ACF संबंध क्षेत्र की जाँच करना चाहते हैं ।


लोन लिंक और प्लगइन सिफारिशों को खराब गुणवत्ता वाले उत्तर माना जाता है। कारण सरल है: यदि लिंक चला गया है, तो उत्तर (और यह साइट) लिंक रोट से ग्रस्त है।
कैसर

3
लिंक-फ्री समाधान समय के साथ अप्रचलित भी हो सकते हैं, और यह मृत लिंक से सबसे खराब है क्योंकि कुछ लोग इन अप्रचलित समाधानों को लागू करने की कोशिश में समय बर्बाद कर सकते हैं, यह जानते हुए भी कि वे अब काम नहीं करते हैं। इसके अलावा ACF और इसकी वेबसाइट बहुत लंबे समय तक चलने की संभावना है। अंत में इस शानदार विकल्प के लिए बहुत Bjorn धन्यवाद।
drake035

2

चूंकि मूल प्रश्न "पी 2 पी चला गया तो आप क्या करेंगे?" मेरे पास एक विचार / सुझाव है। मुझे वास्तव में जरूरत है, क्योंकि यदि आप एक प्लगइन का निर्माण कर रहे हैं, तो उपयोगकर्ताओं को एक और प्लगइन स्थापित करने के लिए कहना हमेशा व्यवहार्य नहीं होता है।

पोस्ट मेटा का उपयोग करने के लिए एक सरल विधि होगी। उदाहरण के लिए। लेखक के post_meta में, आप पुस्तकों को संग्रहीत कर सकते हैं। या तो अद्वितीय प्रविष्टियों या एकल अल्पविराम से अलग प्रविष्टि या क्रमबद्ध सरणी के रूप में। फिर पुस्तक पर, आप लेखक (एस) के व्युत्क्रम जानकारी संग्रहीत करते हैं।

एक और नई डीबी तालिका (उस पर आधारित) को जोड़ना होगा जो रिश्तों और अन्य प्रासंगिक जानकारी को संग्रहीत करता है।

कोई भी उपाय कितना कारगर है इसका कोई अंदाजा नहीं है, लेकिन वे काम करते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.