একটি মু-প্লাগইন প্লাগইনে, কাস্টম পোস্ট ধরণের জন্য ফ্লাশ_উইরাইট_রুলসের সেরা উপায়?


9

আমি একটি প্লাগইন লিখছি যা একটি কাস্টম পোস্ট ধরণের (অন্যান্য জিনিসের মধ্যে) তাত্ক্ষণিক করে তোলে। এটি একটি মাল্টিসাইট প্লাগইন এবং মিউ-প্লাগইন ডিরেক্টরিতে থাকে ।

এই পরিস্থিতিতে ফ্লাশ_প্রিট_রুলস () পরিচালনা করার জন্য সেরা অনুশীলন কী ? একটি 'সাধারণ' প্লাগইনটির জন্য আপনি এটি একটি অ্যাক্টিভেশন হুক-এ করতেন - যা হুকগুলি উপলভ্য না হওয়ায় এটি অবশ্যই ব্যবহারের প্লাগইনটির পক্ষে সম্ভব নয়।

যেহেতু কাস্টম পোস্টের ধরণটি রেজিস্ট্রেশন করার পরে এটি "এক সময়" ইভেন্ট হওয়ার কথা, তাই আমার ক্লাসে সিপিটি নিবন্ধিত করে এমন কিছু করা কি বোধগম্য হবে:

private function check_flush_my_CPT() {
    global $wp_rewrite;
    if ( !get_option('my_plugin_firstrun') ) {
        $wp_rewrite->init();
        $wp_rewrite->flush_rules(true);
        update_option('my_plugin_firstrun', 'yes');
    }
}

public function register_my_CPT() {
   // do all the CPT setup steps for the $args array...  

   register_post_type('my_CPT', $args);
   $this->check_flush_my_CPT();
}

add_action( 'init', array(&$this, 'register_my_CPT' ) );

সুতরাং, সিপিটি রেজিস্ট্রেশন প্রতিটি 'ইআর' ক্রিয়াতে ঘটে - তবে আমার যদি এই অধিকার থাকে তবে পুনর্লিখনের নিয়মগুলি কেবল একবারে ফ্লাশ হয়। কখনও

আমি কি সঠিক পথে রয়েছি?

(সম্পাদনা): আমি কেবল এটি চেষ্টা করেছি; আমার সিপিটি একটি 404 পাওয়া যায়নি ত্রুটি দিচ্ছে, সুতরাং পুনর্লিখনের নিয়মগুলি কাজ করছে না :-(

(# 2 সম্পাদনা করুন): আমি বিশ্বব্যাপী ভেরিয়েবল অ্যাক্সেসের জন্য সমাধানটি চেষ্টা করেছিলাম যেমন এই প্রশ্নে দেখানো হয়েছে: মাল্টিসাইটে পুনরায় লেখার নিয়মগুলি কীভাবে নির্ভরযোগ্যভাবে ফ্লাশ করবেন? - আমি এটি দেখানোর জন্য উপরে আমার কোড উদাহরণ আপডেট করব। দুর্ভাগ্যক্রমে আমি এখনও সিপিটি লোড করার চেষ্টা করে 404 ত্রুটি পাচ্ছি। আমি দেখতে পাচ্ছি যে পুনর্লিখনের নিয়মগুলি ডাটাবেসে সংরক্ষণ করা হচ্ছে, মনে হচ্ছে এটি ব্যবহার করা হচ্ছে না। আমি শেষ.



এটি করার কোনও যথাযথ উপায় নেই। এই মূলত এই মন্তব্যটি লেখার সময় ভাল হয়।
পিটার গুজন

@ পিটারগুজন - ধন্যবাদ, আমি এটি আগে দেখেছি এবং অন্যান্য সমাধান বিবেচনা করার জন্য আমি আমার প্রশ্ন আপডেট করেছি। এখনও কাজ করছে না. আমি ভাবছি আমি অন্য উত্তরটি দেখার আগে ফ্লাশ_উইরাইট_রুলস () চালিয়ে কিছু ভেঙে ফেলেছি কিনা? সঠিক পদ্ধতিটি সঠিকভাবে পরীক্ষা করার জন্য আমাকে আমার পরীক্ষার সাইটটি মুছে ফেলা এবং পুনরায় প্রতিষ্ঠিত করতে হবে?
সিসি

এটা সম্ভব হতে পারে। কোনও মাল্টিসাইটে ভুলভাবে ফ্লাশ পুনর্লিখনের নিয়মগুলি কার্যকর করা আপনার নেটওয়ার্কের সমস্ত পুনর্লিখনের নিয়মগুলি ভেঙে দিতে পারে। আমি যদি আপনি যেখানে থাকেন, আমি সবে নতুন করে শুরু করব। কেবলমাত্র আশা একটি স্থানীয়
ইনস্টলটি

ঠিক আছে ... আমি চেষ্টা করব। এবং না, এটি একটি পরীক্ষার সাইট এবং আমার মনে হয় আমি এখনই আমার ঘুমের মধ্যে ডিবি মুছে ফেলতে এবং নেটওয়ার্ক কনফিগারেশনটি পুনরায় সেট করতে পারি! :-)
সিসি

উত্তর:


2

flush_rewrite_rulesফাংশন একটি থিম বা একটি প্লাগইন মত কিছু প্রেক্ষিতে আঙ্গুলসমূহ উপর ভিত্তি করে নির্ভরযোগ্য কিন্তু আমি নিশ্চিত যদি এটি একটি জন্য কাজ করে নইmu-plugin

আমার বক্তব্যটি ওয়ার্ডপ্রেসটি এভাবে শুরু করা হয়েছে তার উপর ভিত্তি করে:

  • wp-settings.phpফাইল কল
  • do_action( 'muplugins_loaded' );হুক কল করুন , এখানে আপনার প্লাগইন আরম্ভ করা হয়
  • $GLOBALS['wp_rewrite'] = new WP_Rewrite();এখানে কল করুন পদ্ধতিটি flush_rulesআরম্ভ করা হয়েছে এবং এখন থেকে উপলভ্য
  • do_action( 'setup_theme' );বলা হয় এবং আমি আমার সমস্ত অর্থ বাজি রাখি যা এই কাজটিতে flush_rewrite_rulesকাজ করবে

সমাধান?

ব্যক্তিগতভাবে, আমি পুনর্লিখন_রুলস বিকল্পটি মোছার জন্য নির্ভরযোগ্য find

delete_option('rewrite_rules');

অথবা

update_option('rewrite_rules', '' );

যখনই ওয়ার্ডপ্রেসের অভাব হবে rewrite_rulesএটি এগুলি আবার তৈরি করবে, flush_rulesপদ্ধতিটিও এটি করে।

ওয়ার্ডপ্রেস এক্সিকিউশন ফ্লোতে এমন পয়েন্ট রয়েছে যেখানে এই জাতীয় ফাংশন উপলব্ধ নেই। এমনকি ওয়ার্ডপ্রেসের মূল অংশেও আমি এই বিবৃতিটি পেয়েছি

// Rewrite rules can't be flushed during switch to blog.
delete_option( 'rewrite_rules' );

একমাত্র সমস্যা হ'ল পারফরম্যান্স, প্রতিটি অনুরোধে এটি করবেন না কারণ এগুলি আবার তৈরি করা শক্ত প্রক্রিয়া। আমি দেখতে পাচ্ছি আপনি কেবল প্রথম কলটিতে সেগুলি ফ্লাশ করতে চান এবং এটি একটি ভাল জিনিস।

পিএস: আমি এমন কোনও স্ব-প্রচার ভক্ত নই তবে আমি দীর্ঘকাল আগে এই সম্পর্কে একটি নিবন্ধ লিখেছি এবং আমি মনে করি এটি এখনও এটির জন্য দাঁড়িয়েছে I


0

আপনার মিউ-প্লাগইনটিতে যদি বিকল্প থাকে তবে আমি সেগুলি আপডেট করার পরে ফ্লাশটি ঠিক রেখে দেব:

update_option( 'my_options', $values );
// Flush rules after install
flush_rewrite_rules();
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.