एक प्रोग्रामर के रूप में, मैं अपने पोस्ट प्रकारों को जोड़ने के लिए अपना कोड लिखना शुरू करूंगा। यह एक त्वरित तरीका नहीं है, यह आसान नहीं है, लेकिन यह बहुत मजेदार है।
पद के प्रकार
हम दो सरल पोस्ट प्रकार बनाकर शुरू करते हैं, 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
}
स्विच आपके द्वारा पिछले फ़ंक्शन में जोड़े गए प्रत्येक कॉलम के लिए है। आप उसे दिखाना चाहते हैं, जिसे आप दिखाना चाहते हैं। हमें वह पद मिलता है जो हमारी पुस्तक का लेखक है और अपने 'प्रोफाइल पेज' पर एक अच्छा पर्मलिंक बनाता है। यह है जो ऐसा लग रहा है:

जारी रहती है
हमने अपनी वर्डप्रेस साइट के बैकएंड में दो पोस्ट टाइप कनेक्ट किए हैं, लेकिन हम फ्रंटएंड में इसके बारे में नहीं देख सकते हैं। इसे पूरा करने के लिए बहुत अधिक काम करने की आवश्यकता होगी, लेकिन संभावनाएं कुछ अंतहीन हैं। हम:
- लेखक द्वारा पुस्तकों को क्रमबद्ध करें
- लेखक पृष्ठ पर पुस्तकों की एक सूची दिखाएं
- पुस्तक पृष्ठ पर लेखक की अन्य पुस्तकों की सूची दिखाएँ
- लेखक के चित्रों के साथ एक फैंसी मेटाबॉक्स बनाएं
- उन पुस्तकों के लिए लेखक व्यवस्थापक पृष्ठ में एक कॉलम बनाएँ, जो उसने लिखी थी
- और भी काफी...
मैं इस उत्तर पर काम करना जारी रखूंगा, क्योंकि मुझे स्वयं इस समाधान की आवश्यकता है। हालाँकि, मैं अभी इसके लिए काम करना बंद कर दूंगा। मैं इस उत्तर को कल अपडेट करना शुरू करूंगा।