একসাথে বিভিন্ন সিপিটি কীভাবে সংযুক্ত করবেন?


11

আমি আশা করি এখানে এই প্রশ্নের জায়গা আছে।

আমি সর্বদা ভেবেছি যে বিভিন্ন কাস্টম পোস্ট প্রকারকে এক সাথে সংযুক্ত করা কাস্টম ট্যাক্সনমি ব্যবহারের জনপ্রিয় টিউটোরিয়াল উদাহরণগুলির মতো (বই / লেখক / উপাধি, ছায়াছবি / অভিনেতা / পরিচালক, ইত্যাদি) একটি সাধারণ প্রয়োজন। আমি ব্যক্তিগতভাবে "পোস্ট 2 পোস্ট" ব্যবহার করি, তবে সমর্থন বন্ধ হয়ে যায়।

গুগলে এই মুহুর্তে সর্বাধিক প্রাসঙ্গিক ফলাফলগুলি এই প্লাগইনটির দিকে নির্দেশ করে। কোন দীর্ঘমেয়াদী বিকল্প বিদ্যমান? একটি পাকা ওয়ার্ডপ্রেস ওয়েব বিকাশকারী আজ কি ওয়ার্ডপ্রেসের সাথে কোনও বই / লেখক / শিরোনাম পরিচালনা ব্যবস্থা ডিজাইন করতে ব্যবহার করতে পারে, যদি পি 2 পি প্লাগইন শেষ হয়?


কাস্টম পোস্টের প্রকারগুলি তৈরি করতে আপনি কোন কোড ব্যবহার করেছেন? আপনি এই কোড ওয়ার্ডপ্রেস.
ব্র্যাড ডালটন

1
আমার মনে হয় বিপুল সংখ্যক লোক এখনও পি 2 পি ব্যবহার করে যাতে আমি কখনই এটি ব্যর্থ হতে দেখি না যে কেউ কেবল কাঁটাচামচ করে এটি গিথুবে বজায় রাখতে পারে। যদি সমর্থনটি বাদ দেওয়া হয় তবে আমি ধরে নিই এর অর্থ হ'ল স্ক্রিবু নতুন কিছু নিয়ে কাজ করছে বা কার্যকারিতাটি মূল পথে চলেছে। আমি এটি ব্যবহার না করার কারণ হিসাবে দেখছি না।
সানচোথফাত

1
আমি তেমন নিশ্চিত না। ডাব্লুপি প্লাগইন পৃষ্ঠায় পি 2 পি-র কেবলমাত্র 55,000 ডাউনলোড রয়েছে, যা আমি ভাবার চেয়ে কম জনপ্রিয় popular এবং আমি বুঝতে পারছি না কেন, কারণ আবার সিপিটি সংযুক্ত করা আমার কাছে খুব মৌলিক এবং সাধারণ প্রয়োজন বলে মনে হচ্ছে। প্লাগইন যা কেবলমাত্র মৌলিক বিষয়কে সম্বোধন করে কেবল 55,000 ডাউনলোড থাকতে পারে? ওটা আমার বাইরে। একমাত্র ব্যাখ্যা হ'ল আমার প্রশ্নটির সমাধান করার জন্য আরও একটি ভাল উপায় রয়েছে।
drake035

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.
স্কুবা কে

4
এই প্রশ্নটি উত্সাহিত এবং তারাযুক্ত কারণ আমার কাছে মনে হয় ওয়ার্ডপ্রেসে HABTM সত্যিই আকর্ষণীয়। এটি বলেছিল, আমি প্লাগিনটি খুব বেশি দূরে যেতে ঘাম দেব না, মার্ক জাকিথ এটিকে চালিয়ে যেতে সাহায্য করার জন্য স্বেচ্ছাসেবী হয়েছেন । এবং কিছু ডাব্লুপি প্লাগইনগুলিতে 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 দেখতে পাচ্ছি। ওয়ার্ডপ্রেসের ভর সম্পাদনা কার্যকারিতার জন্য সিবি চেকবক্স কলামটি প্রয়োজন। এখন আমাদের কলামে কিছু তথ্য যুক্ত করা দরকার। আমরা এই ফাংশন যুক্ত:

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. এবং আরো অনেক কিছু...

আমি এই উত্তরের উপর কাজ চালিয়ে যাব, কারণ আমার নিজের এই সমাধানটি প্রয়োজন। তবে আমি আপাতত কাজ করা বন্ধ করব stop আমি আগামীকাল এই উত্তরটি আপডেট করা শুরু করব।


আপনার আশ্চর্যজনক উত্তর ভাগ করে নেওয়ার জন্য আপনাকে ধন্যবাদ। আপনি কীভাবে লেখকের লেখা বইগুলির একটি তালিকা প্রদর্শন করবেন?
উইলিয়াম

4

আমি এ নিয়ে খুব বেশি চিন্তা করব না, কারণ বেশ কয়েকজন দুর্দান্ত বিকাশকারী সমর্থন অব্যাহত রাখতে স্বেচ্ছাসেবীর কাজ করেছিলেন । তবে আপনি অন্য কিছু ব্যবহার করতে চাইলে এসিএফের সম্পর্ক ক্ষেত্রটি পরীক্ষা করে দেখুন ।


লোন লিঙ্ক এবং প্লাগইন সুপারিশগুলি নিম্ন মানের উত্তর হিসাবে বিবেচিত হয়। কারণটি সহজ: লিঙ্কটি চলে গেলে উত্তর (এবং এই সাইট) লিঙ্ক পচায় ভুগছে।
কায়সার

3
লিঙ্ক-মুক্ত সমাধানগুলি সময়ের সাথে সাথে অচল হয়ে যেতে পারে এবং এটি মৃত লিঙ্কগুলির চেয়েও খারাপ কারণ কিছু লোক এই অচল সমাধানগুলি বাস্তবায়নের চেষ্টা করতে ব্যর্থ হতে পারে যে তারা আর কাজ করে না। এসিএফ এবং এর ওয়েবসাইটগুলি খুব দীর্ঘ সময় স্থায়ী হওয়ার সম্ভাবনা রয়েছে। অবশেষে এই চমত্কার বিকল্পটির জন্য প্রচুর ধন্যবাদ জানাই।
drake035

2

যেহেতু মূল প্রশ্নটি "পি 2 পি চলে গেলে আপনি কি করবেন?" আমার একটি চিন্তা / পরামর্শ আছে। আমার আসলে দরকার ছিল, কারণ আপনি যদি একটি প্লাগইন তৈরি করে থাকেন তবে ব্যবহারকারীদের অন্য একটি প্লাগইন ইনস্টল করতে বলা সর্বদা কার্যকর নয়।

একটি সহজ পদ্ধতি হ'ল পোস্ট মেটা ব্যবহার করা। উদাহরণ স্বরূপ. লেখকের পোস্ট_মেটাতে, আপনি বইগুলি সঞ্চয় করতে পারেন। হয় অনন্য এন্ট্রি বা একটি একক কমা দ্বারা পৃথক এন্ট্রি বা একটি সিরিয়ালযুক্ত অ্যারে হিসাবে। তারপরে বইটিতে, আপনি লেখক (গুলি) এর বিপরীত তথ্য সঞ্চয় করেন store

অন্যটি হ'ল একটি নতুন ডিবি টেবিল যুক্ত করা (এতে ভ্রূণিত হওয়া) সম্পর্ক এবং অন্যান্য প্রাসঙ্গিক তথ্য সংরক্ষণ করে।

উভয় সমাধান স্কেল এ কতটা দক্ষ তা ধারণা নেই, তবে তারা কাজ করে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.