ওয়ার্ডপ্রেস মাল্টিসাইট - গ্লোবাল বিভাগ


21

একটি ডাব্লুপি মাল্টিসাইট উদাহরণ স্থাপন করে - ক্লায়েন্টের একটি বিদ্যমান অ্যান্টোলজি / বিভাগগুলির সেট রয়েছে যা তারা ব্লগের সেট জুড়ে সমস্ত সামগ্রীকে শ্রেণিবদ্ধ করতে চায়। এছাড়াও ইচ্ছাটি হ'ল যে কোনও নতুন বিভাগগুলি 'নেটওয়ার্ক ব্লগ' পর্যায়ে যুক্ত করা হবে এবং অন্যান্য ব্লগগুলিতে সিঙ্ক করা হবে।

এটি করার সর্বোত্তম উপায় কী?


আমার ধারণা বিশ্বব্যাপী পরিবর্তনশীল হিসাবে নির্ধারিত বিভাগগুলি তৈরি করা এবং তারপরে থিম init এ আমদানি করা।
কায়সার

4
আমি মনে করি এই প্রশ্নটি 3.0 এর একাধিক ব্লগের মধ্যে একটি ভাগের ভাগ ভাগের সমান । এই প্রশ্নটি অবশ্য ভাল উত্তর পায় নি। এটি একটি আকর্ষণীয় প্রশ্ন, আমি এটির জন্য একটি অনুদান অফার করব।
জান ফ্যাব্রি

উত্তর:


14
function __add_global_categories( $term_id )
{
    if ( get_current_blog_id() !== BLOG_ID_CURRENT_SITE || ( !$term = get_term( $term_id, 'category' ) ) )
        return $term_id; // bail

    if ( !$term->parent || ( !$parent = get_term( $term->parent, 'category' ) ) )
        $parent = null;

    global $wpdb;

    $blogs = $wpdb->get_col( "SELECT blog_id FROM {$wpdb->blogs} WHERE site_id = '{$wpdb->siteid}'" );
    foreach ( $blogs as $blog ) {
        $wpdb->set_blog_id( $blog );

        if ( $parent && ( $_parent = get_term_by( 'slug', $parent->slug, 'category' ) ) )
            $_parent_ID = $_parent->term_id;
        else
            $_parent_ID = 0;

        wp_insert_term( $term->name, 'category',  array(
            'slug' => $term->slug,
            'parent' => $_parent_ID,
            'description' => $term->description
        ));
    }

    $wpdb->set_blog_id( BLOG_ID_CURRENT_SITE );
}
add_action( 'created_category', '__add_global_categories' );

এটি যখনই মূল সাইটে কোনও বিভাগ যুক্ত করা হবে তখন চলবে । কয়েকটি সতর্কতা / বিষয় উল্লেখযোগ্য;

  • আপনার যদি প্রচুর ব্লগ থাকে তবে এই ফাংশনটি বেশ নিবিড় হয়ে উঠতে পারে।
  • গড়ে, আমরা প্রতি ব্লগে 5 থেকে 8 টি কোয়েরির মধ্যে (সম্ভবত আরও বেশি) দৌড়াচ্ছি - আপনার ডাটাবেসের গতির উপর নির্ভর করে এই ফাংশনটি ছিন্ন করার প্রয়োজন হতে পারে।
  • কেবল নতুন যুক্ত হওয়া বিভাগগুলি 'সিঙ্ক করা'। বিভাগগুলি আপডেট করা এবং মুছে ফেলা নয় (কোডটি সংশোধন করা দরকার)।
  • যদি নতুন যুক্ত হওয়া বিভাগটির পিতা বা মাতা থাকে এবং পিতামাতাকে প্রশ্নযুক্ত মাল্টিসাইট ব্লগের মধ্যে খুঁজে পাওয়া যায় না, তবে কোনও পিতামাতাকে নিয়ে বিভাগটি তৈরি করা হবে (এই ফাংশনটি ইনস্টল করার আগে পিতামাতার বিভাগটি তৈরি করা হয়েছিল কেবল তখনই এটি হওয়া উচিত)।

1
এটি আছে - বা সেখানে থাকতে পারে - একটি প্লাগইন এটি করে? সম্পাদনা এবং মোছার পাশাপাশি? এবং কোন সেটিংস পৃষ্ঠা এবং কোন শিশু সাইটগুলিতে এটি প্রয়োগ করতে হবে তা চয়ন করার জন্য একটি সেটিংস পৃষ্ঠা?
মার্কাস ডাউনিং

আসলে, আপনি কি আপত্তি করবেন যদি আমি আপনার কোডটি একটি প্লাগইন লেখার জন্য পয়েন্ট হিসাবে ব্যবহার করি?
মার্কাস ডাউনিং

যাই হোক না কেন সমস্যা - আমার উত্তরগুলি স্ট্যাক এক্সচেঞ্জের লাইসেন্সের অধীনে আসে,
স্যাটেলাইট

11

ওহ, রবিবার বিলম্ব ...

https://github.com/maugly/Network-Terminator

  • পুরো নেটওয়ার্ক জুড়ে বাল্ক অ্যাড শর্তাদি
  • কোন সাইটগুলি প্রভাবিত হবে তা আপনি নির্বাচন করতে পারেন
  • কাস্টম ট্যাক্সনোমির সাথে কাজ করে
  • মুছে না
  • সিঙ্ক হয় না

এটি এমন কিছু যা আমি গত কয়েক ঘন্টা ধরে করেছি এবং এখন আরও পরীক্ষার জন্য আমার হাতে সময় নেই। যাইহোক - এটি আমার জন্য কাজ করে! ।)

একবার চেষ্টা করে দেখো. একটি 'টেস্ট রান' বৈশিষ্ট্যও কার্যকর করা হয়েছে যাতে আপনি কিছু করার আগে ফলাফলটি পরীক্ষা করতে পারেন।

আপডেট -> স্ক্রিনশট:

কর্মের আগে:

কর্মের আগে

পরীক্ষা চালানোর পরে:

পরীক্ষার পরে রান

উপরে লিঙ্কযুক্ত প্লাগইন ব্যবহারকারীর ইন্টারফেস যুক্ত করে তবে এই কার্যক্রমে গুরুত্বপূর্ণ সমস্ত কিছু ঘটে:

        <?php function mau_add_network_terms($terms_to_add, $siteids, $testrun = false) {

        // check if this is multisite install
        if ( !is_multisite() )
            return 'This is not a multisite WordPress installation.';

        // very basic input check
        if ( empty($terms_to_add) || empty($siteids) || !is_array($terms_to_add) || !is_array($siteids) )
            return 'Nah, I eat only arrays!';

        if ($testrun) $log = '<p><em>No need to get excited. This is just a test run.</em></p>';
        else $log = '';

        // loop thru blogs
        foreach ($siteids as $blog_id) :

            switch_to_blog( absint($blog_id) );

            $log .= '<h4>'.get_blog_details(  $blog_id  )->blogname.':</h4>';
            $log .= '<ul id="ntlog">';

            // loop thru taxonomies
            foreach ( $terms_to_add as $taxonomy => $terms ) {

                // check if taxonomy exists
                if ( taxonomy_exists($taxonomy) ) {
                    // get taxonomy name
                    $tax_name = get_taxonomy($taxonomy);
                    $tax_name = $tax_name->labels->name;

                    //loop thru terms   
                    foreach ( $terms as $term ) {

                        // check if term exists
                        if ( term_exists($term, $taxonomy) ) {
                            $log .= "<li class='notice' ><em>$term already exists in the $tax_name taxonomy - not added!</em></li>";

                        } else {

                            // if it doesn't exist insert the $term to $taxonomy
                            $term = strip_tags($term);
                            $taxonomy = strip_tags($taxonomy);
                            if (!$testrun)
                                wp_insert_term( $term, $taxonomy );
                            $log .= "<li><b>$term</b> successfully added to the <b>$tax_name</b> taxonomy</li>"; 
                        }
                    }
                } else {
                    // tell our log that taxonomy doesn't exists
                    $log .= "<li class='notice'><em>The $tax_name taxonomy doesn't exist! Skipping...</em></li>"; 
                }
            }

            $log .= '</ul>';    

            // we're done here
            restore_current_blog();

        endforeach;
        if ($testrun) $log .= '<p><em>No need to get excited. This was just the test run.</em></p>';
        return $log;
    } ?>

আমি ফিরে এসে আরও তথ্যের সাথে এটি পরে সম্পাদনা করব (যদি প্রয়োজন হয়)।

এটি নিখুঁত থেকে দূরে (প্লাগইন শিরোনামে জ্ঞাত সমস্যাগুলি পড়ুন)।
কোন প্রতিক্রিয়া প্রশংসা!


3
লোকেরা যখন প্রশ্নের জবাবে প্লাগইন তৈরি করে তখন আমি এটি পছন্দ করি! আপনি অনুগ্রহ প্রাপ্য!
জান ফ্যাব্রি

আপনার সমর্থনের জন্য ধন্যবাদ জান ফ্যাব্রি আমি খুশি হব যদি আমার পাশের কেউ আসলে এই জিনিসটিকে দরকারী মনে করে।
মিশাল মৌ


5

TheDeadMedic এর উত্তর দেখতে ভাল লাগছে, তবে আমি সমস্যার দিকে আলাদা পদ্ধতির অবতরণ করেছি। অনেকগুলি সাইট জুড়ে একই শর্তাদি সদৃশ করার পরিবর্তে, আমি পরিবর্তে অন্যান্য সাইটগুলিকে শর্তাদির জন্য হোম সাইটের টেবিলগুলি ব্যবহার করতে বাধ্য করেছিলাম।

add_action('init', 'central_taxonomies');

function central_taxonomies () {
  global $wpdb;

  $wpdb->terms = "wp_terms";
  $wpdb->term_taxonomy = "wp_term_taxonomy";
}

এটি টেবিলের নাম ইত্যাদির wp_2_termsসাথে প্রতিস্থাপন করে wp_termsইত্যাদি সারণীর সঠিক নাম নিশ্চিত করার জন্য অবশ্যই আপনার ডাটাবেসটি পরীক্ষা করা উচিত, আপনি যদি আপনার উপসর্গ পরিবর্তন করেন তবে আলাদা হতে পারে।

আপনি এটি কোনও প্লাগইন বা থিম থেকে চালাতে পারেন (যদিও আমি একটি প্লাগইন প্রস্তাব করি)। আমি এক পর্যায়ে এটি করার জন্য একটি প্লাগইন প্রকাশ করতে পারি। এই পদ্ধতির দুটি ডাউনসাইড রয়েছে:

  • এটি কেবলমাত্র চাইল্ড সাইটগুলিতে সক্রিয় যা প্লাগইন সক্রিয় আছে। প্যারেন্ট সাইট থেকে এটি প্রয়োগ করার কোনও উপায় নেই।
  • এটি কেবলমাত্র নির্বাচিতগুলি নয়, সমস্ত বিভাগের ক্ষেত্রে প্রযোজ্য ।

এই পদ্ধতির নমনীয় - এটি কোনও কেন্দ্রীয় থেকে নয়, কোনও ব্লগ থেকে বিভাগগুলি টানতে মানিয়ে নেওয়া যেতে পারে।


আপডেট: আমি এটিকে একটি প্লাগইনে পরিণত করেছি, যা আপনার প্রয়োজন হলে সাইট-প্রশস্ত করা যেতে পারে: এমইউ সেন্ট্রাল ট্যাক্সনোমিজ


এই পদ্ধতির সাথে একটি বড় সমস্যা রয়েছে: পোস্ট এবং শর্তগুলির মধ্যে সম্পর্ক সঠিক নাও হতে পারে। টেবিল টার্ম_ সম্পর্কিততা পোস্ট আইডি এবং টার্ম আইডির উপর ভিত্তি করে এই সম্পর্কটি ধারণ করে। তবে সবসময় এমন সুযোগ থাকে যে সাবসাইটগুলিতে পোস্টের একই আইডি থাকে। 1 টি পোস্টের জন্য পদ পরিবর্তন করা অন্য ব্লগের অন্য পোস্টে অবিশ্বাস্য প্রভাব ফেলতে পারে।
আন ট্রান

সঠিক, term_relationshipsটেবিলটি অন্তর্ভুক্ত করা উচিত নয়। আমি অনেক আগে প্লাগইনে স্পট এবং ফিক্সড করেছি, তবে এই উত্তরটির সাথে কোনও মিল নেই never
মার্কাস ডাউনিং

1

হ্যাঁ এটা সম্ভব। আমি বহু বছর আগে ডাব্লুপিএমইউয়ের জন্য এর মতো একটি প্লাগইন তৈরি করেছি (http://natureofmind.org/30/default-categories- for-new-blogs/ তবে আর সমর্থিত নয়) আরও আপ-টু-ডেট নিম্নলিখিত দুটি প্লাগইন হবে: http : //wordpress.org/extend/plugins/wpmu-new-blog-defaults/ এবং http://premium.wpmudev.org/project/new-blog-template

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