একটি প্লাগিনের কাস্টম পোস্ট ধরণের পুনর্নির্ধারণ / পরিবর্তন স্লাগ


28

প্লাগিনের বিদ্যমান কাস্টম পোস্ট ধরণের (কেবলমাত্র প্লাগইন সম্পাদনা না করে) স্লাগকে পুনরায় ঘোষণা / পরিবর্তন করা কি সম্ভব?

এটি হ'ল, যদি প্লাগিন এক্স স্লাগ / আনকোকেড টোস্ট / দিয়ে একটি কাস্টম পোস্ট টাইপ তৈরি করে, তবে ফাংশন.ফ্পে (বা অনুরূপ কিছু) কোনও ফিল্টার যুক্ত করা সম্ভব যা স্লাগটিকে / রুটি / এ পরিবর্তন করে?


আমি কেবলমাত্র 20 টির অগ্রাধিকার নিয়ে আর ডি তে ঝুঁকতে দিয়ে আবার একই পোস্টের জন্য আবার রেজিস্টার_পোস্ট_প্রকার কল করে এই একই সমস্যাটি সমাধান করেছি। যে কেউ যদি রাস্তাঘাটে আমার কোনও সমস্যা সৃষ্টি করে?
ডাস্টিন

উত্তর:


24

হ্যাঁ, এটি সম্ভব, তবে যদি প্লাগইনটি rewrite => array('slug' => 'post_type')প্যারামিটারটি ব্যবহার করে একটি কাস্টম পোস্ট প্রকার তৈরি করে , তবে সম্ভবত আপনি স্লাগটি প্রতিস্থাপন করতে সক্ষম হবেন না।

যখনই কাস্টম পোস্টের প্রকারগুলি তৈরি করা হয় তখন ইউআরএল পুনর্লিখনের নিয়মগুলি ডাটাবেসে লেখা হয়। কোন ক্রিয়াটি কাস্টম পোস্ট প্রকারের (যেমন ডিআইডি অ্যাকশন) তৈরির সূত্রপাত করে তার উপর নির্ভর করে , আপনি কী কী পরিবর্তন করার চেষ্টা করছেন তা বিবেচনা না করে ওয়ার্ডপ্রেস পুনর্লিখনের নিয়মগুলি পুনরায় লেখবে এবং কাস্টম পোস্টের ধরণের স্লাগগুলি পুনরুদ্ধার করবে।

এটি বলেছে, আপনি কাস্টম পোস্ট ধরণের জন্য কাস্টম স্লাগগুলি সরবরাহ করতে পারেন। নিম্নলিখিত উদাহরণটি ধরে নেওয়া হয়েছে যে আপনার একটি কাস্টম পোস্ট ধরণের রয়েছে moviesএবং আপনি /movies/স্লাগটি পরিবর্তন করার চেষ্টা করছেন /films/

সম্পূর্ণ হওয়ার জন্য, এখানে moviesকাস্টম পোস্টের ধরণটি সংজ্ঞায়িত করতে ব্যবহৃত মূল কাজটি রয়েছে । আপনি যে প্লাগইনটি উল্লেখ করছেন সেটি এমন কিছু করা উচিত:

function movies_register_post_type() {

    register_post_type(
        'movies',
        array(
            'labels' => array(
                'name' => __('Movies'),
                'singular_name' => __('Movie')
            ),
            'public' => true,
            'has_archive' => true,
            'rewrite' => array(
                'slug' => 'movies'
            )
        )
    );

} // end example_register_post_type
add_action('init', 'movies_register_post_type');

বিদ্যমান পোস্টের প্রকারের ভিত্তিতে নিজস্ব কাস্টম বিধিগুলি সরবরাহ করে আপনি বিকল্প সারণিটি সংশোধন করতে পারেন।

মূলত, আমরা এটি করব:

  • বিদ্যমান নিয়মগুলির সেটটি নিন এবং তারপরে আমাদের নিজস্ব কাস্টম স্লাগগুলি নিয়ে আমাদের নিজস্ব লিখুন
  • নতুন নিয়মটিকে কাস্টম পোস্টের ধরণের স্লাগের চেয়ে বেশি অগ্রাধিকার দিন

আপনি কীভাবে এটি করতে পারেন তা এখানে:

function add_custom_rewrite_rule() {

    // First, try to load up the rewrite rules. We do this just in case
    // the default permalink structure is being used.
    if( ($current_rules = get_option('rewrite_rules')) ) {

        // Next, iterate through each custom rule adding a new rule
        // that replaces 'movies' with 'films' and give it a higher
        // priority than the existing rule.
        foreach($current_rules as $key => $val) {
            if(strpos($key, 'movies') !== false) {
                add_rewrite_rule(str_ireplace('movies', 'films', $key), $val, 'top');   
            } // end if
        } // end foreach

    } // end if/else

    // ...and we flush the rules
    flush_rewrite_rules();

} // end add_custom_rewrite_rule
add_action('init', 'add_custom_rewrite_rule');

এখন, আপনার মুভিগুলি অ্যাক্সেস করার দুটি উপায় রয়েছে:

  • /movies/Back-To-The-Future
  • /films/Back-To-The-Future

মনে রাখবেন যে, আমি hooking সুপারিশ করি না add_custom_rewrite_ruleবা initযেমন খুব ঘন ঘন আগুন দেবেন কর্ম। এইটা শুধুমাত্র একটা উদাহরণ. ফাংশনটি প্রয়োগ করার আরও ভাল জায়গাটি থিম অ্যাক্টিভেশন, প্লাগইন অ্যাক্টিভেট, সম্ভবত সেভ_পোস্ট অ্যাকশন ইত্যাদির উপর নির্ভর করে আপনার যা করা দরকার তার উপর নির্ভর করে আপনার কেবল একবার বা মাত্র কয়েকবার গুলি চালানোর প্রয়োজন হতে পারে।

এই মুহুর্তে, আপনি ' /movies/স্লাগ ব্যবহার করতে কাস্টম পোস্ট টাইপের জন্য পারমালিকগুলি আপডেট করার বিষয়টি বিবেচনা করতে পারেন । উদাহরণস্বরূপ, আপনি যদি নেভিগেট করেন তবে আপনি /films/আপনার সমস্ত চলচ্চিত্রের একটি তালিকা দেখতে পাবেন তবে শিরোনামের উপর ঘোরানো প্রকাশিত হবে যে /movies/স্লাগটি এখনও ব্যবহৃত হচ্ছে।

আরও এক ধাপ এগিয়ে যাওয়ার জন্য, আপনি সমস্ত লিঙ্কগুলিকে /movies/তাদের /films/পাল্টা দিকে পুনঃনির্দেশ করার জন্য প্রযুক্তিগতভাবে 301 টি পুনর্নির্দেশের নির্দেশ দিতে পারেন তবে আপনি যা করার চেষ্টা করছেন তার উপর এটি নির্ভর করে।


সুন্দর করে কাজ করেছেন! পারমালিঙ্কস আপডেট করার জন্য আপনি কি আমাকে সঠিক দিকে নির্দেশ করতে পারেন?
এডবারি

1
আপনার থিমের উপর নির্ভর করে আপনি টেম্পলেট স্তরে এটি করতে পারেন। আপনি যখন 'the_title ()' তে কলটি দেখেন, আপনি এটিকে $ শিরোনাম = get_the_title () দিয়ে প্রতিস্থাপন করতে পারেন, তারপরে স্ট্রিংটি '/ চলচ্চিত্র /' দিয়ে $ শিরোনামে '/ চলচ্চিত্র /' প্রতিস্থাপন করতে পারেন।
টম

আপনি যে স্লাগতে পরিবর্তন করতে চান তা বর্তমান পোস্টের একটি মেটা মান দ্বারা গতিশীলভাবে তৈরি করা হয়েছে? আমার $postএই add_custom_rewrite_rule()ফাংশনে ব্যবহার করতে সক্ষম হওয়া দরকার তবে এটি ডাব্লুপি অ্যাডমিনে ত্রুটি ছুঁড়ে ফেলেছে বলেছে 'অ-অবজেক্টের সম্পত্তি পাওয়ার চেষ্টা করা হচ্ছে'। আমি কীভাবে মেটা মান পেতে $ পোস্ট পেতে পারি?
লি

6

এই কোডটি আমার শিশু থিমের জন্য ভাল কাজ করেছে। "প্রোগ্রাম" স্লাগ "স্থান" এ পরিবর্তন করা দরকার।

/*
CHANGE SLUGS OF CUSTOM POST TYPES
*/

function change_post_types_slug( $args, $post_type ) {

   /*item post type slug*/   
   if ( 'program' === $post_type ) {
      $args['rewrite']['slug'] = 'place';
   }

   return $args;
}
add_filter( 'register_post_type_args', 'change_post_types_slug', 10, 2 );

/*
CHANGE SLUGS OF TAXONOMIES, slugs used for archive pages
*/

function change_taxonomies_slug( $args, $taxonomy ) {

   /*item category*/
   if ( 'program-category' === $taxonomy ) {
      $args['rewrite']['slug'] = 'locations';
   }

   return $args;
}
add_filter( 'register_taxonomy_args', 'change_taxonomies_slug', 10, 2 );

এটি নিখুঁতভাবে কাজ করে, আমি এটি ট্যাগগুলির জন্য আপেক্ষিক নিয়ম যুক্ত করার জন্যও ব্যবহার করেছি, সেটিংস পৃষ্ঠা> পারমালিঙ্ক থেকে একটি সেভ সম্পাদন করে পারমালিক্স আপডেট করা প্রয়োজন। ধন্যবাদ!
লোরেঞ্জো মাগন

অন্যান্য আরগগুলিও পরিবর্তন করতে পুরোপুরি কাজ করে, আমার সেট করা দরকার $args['has_archive'] = falseএবং এটি কাজ করেছিল worked
আমার উন্নয়ন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.