অ্যাড_উরাইট_রুল বোঝা


11

আমি add_rewrite_ruleইউআরএল থেকে একটি প্যারাম বের করার এবং অনুরোধটি দিয়ে দেওয়ার জন্য কাজ করার চেষ্টা করছি । এটি সম্পর্কে বেশ কয়েকটি পোস্ট দেখেছেন তবে এটি কাজ করে বলে মনে হচ্ছে না।

যদি কোনও url একটি নির্দিষ্ট স্ট্রিং দিয়ে শুরু হয় তবে আমি এটি url থেকে সরিয়ে একটি ক্যোয়ারী প্যারাম হিসাবে পাস করতে চাই।

অনুরোধ অনুরোধ url:

http://domain.com/foo/my_page

এটি রূপান্তরিত হবে

http://domain.com/my_page?param=foo

যদি 'foo' উপস্থিত না থাকে তবে এটি কেবল একটি সাধারণ অনুরোধ হিসাবে দেখা উচিত। এই যুক্তিটি আমার সাইটের কোনও পৃষ্ঠার ইউআরএল বা কাস্টম পোস্ট টাইপ ইউআরএলকে প্রয়োগ করা উচিত (মূলত foo / *)। এটি ভেবে মনে হচ্ছে এটি পাসের মাধ্যমে কাজ করবে, যদি ইউআরএলটির 'ফু' থাকে তবে তা কেবল সাধারণ বিষয়টিতে ওয়ার্ডপ্রেস দিয়ে যায়।

আমার কাছে ইতিমধ্যে একটি অনুমোদিত ক্যোয়ারী_ভার হিসাবে 'পরম' রয়েছে।

মোট, এটি নিম্নলিখিত জন্য কাজ করা প্রয়োজন:

  • / ফু / মাই_পেজ (পৃষ্ঠা)
  • / ফু / আমার_ফোল্ডার / আমার_পেজ (সাব-পৃষ্ঠা)
  • / foo / উদাহরণ_type (কাস্টম পোস্ট সংরক্ষণাগার)
  • / ফু / উদাহরণ_প্রকার / উদাহরণ_পোস্ট (কাস্টম পোস্ট একক)

কোনও ইউআরএল, অর্থ পোস্ট, বিভাগ, ট্যাগ, ইত্যাদি, কেবল pageপোস্টের ধরণ নয়, বা কোনও পৃষ্ঠা? শ্রেণিবদ্ধের পিতামাতার / সন্তানের পৃষ্ঠাগুলি সম্পর্কে কী?
মিলো

@ মিলো আমি আপনার জন্য এটি পরিষ্কার করে দিয়েছি। আমি কেবল পৃষ্ঠা এবং কাস্টম পোস্ট ধরণের (সংরক্ষণাগার এবং একক পৃষ্ঠা) ব্যবহার করছি।
লুই W

উত্তর:


8

একটি প্রাথমিক নিয়ম যা আপনার উদাহরণের জন্য কাজ করবে:

function wpd_foo_rewrite_rule() {
    add_rewrite_rule(
        '^foo/([^/]*)/?',
        'index.php?pagename=$matches[1]&param=foo',
        'top'
    );
}
add_action( 'init', 'wpd_foo_rewrite_rule' );

এটি পরে যা আসে তা গ্রহণ করে foo/এবং pagenameকোয়েরি হিসাবে সেট করে এবং তারপরে paramস্থির মানটি পায় foo। আপনার যদি বিভিন্ন ইউআরএল নিদর্শনগুলির প্রয়োজন হয় তবে প্রতিটি অনন্য প্যাটার্নের জন্য আপনার অতিরিক্ত নিয়ম দরকার। পড়ুন WP_Queryডক্স জন্য বিভিন্ন ক্যোয়ারী Vars যে লেখা নিয়ম মধ্যে নির্ধারণ করা যাবে। নতুনগুলি যুক্ত করার পরে পুনর্লিখনের নিয়মগুলি ফ্লাশ করতে ভুলবেন না। পারমালিঙ্কস সেটিংস পৃষ্ঠাতে গিয়ে এটি করা যেতে পারে।

এখন আপনার উদাহরণ ইউআরএল ভিজিট:

http://domain.com/foo/my_page

সঠিক পৃষ্ঠাটি লোড করবে, তবে এটি দেখার মতো ঠিক আচরণ করবে না:

http://domain.com/my_page?param=foo

কারণ অভ্যন্তরীণ পুনর্লিখনগুলি ব্যবহার paramকরার সময়, $wp_queryকোয়েরি অবজেক্টের মধ্যে সেট করা হয় , $_GETসুপারগ্লোবাল নয়। যদি আপনাকে কোডটির সাথে মানটির সন্ধান $_GETকরতে প্রয়োজন হয় তবে সেই মানটি সেট করতে আপনার একটি অতিরিক্ত পদক্ষেপের প্রয়োজন হবে:

function wpd_foo_get_param() {
    if( false !== get_query_var( 'param' ) ){
        $_GET['param'] = get_query_var( 'param' );
    }
}
add_action( 'parse_query', 'wpd_foo_get_param' );

বিবেচনা করার জন্য অন্য একটি পদ্ধতি হ'ল শেষ পয়েন্টগুলি ব্যবহার করা, তাই /foo/উপসর্গের পরিবর্তে ইউআরএলগুলির শেষে হবে। এর সুবিধাটি হ'ল এপিআই add_rewrite_endpointপৃষ্ঠাগুলি সক্রিয়করণ সহ আপনার প্রয়োজনীয় সমস্ত বিধি যুক্ত করা সহজ করে।


ব্যাখ্যার মাধ্যমে ধন্যবাদ। কাছে মনে হচ্ছে, পৃষ্ঠাগুলির জন্য কাজ করে তবে কাস্টম পোস্ট সংরক্ষণাগার এবং একক url- এর জন্য আমাকে 404 ত্রুটি দেওয়া হচ্ছে।
লুই

হ্যাঁ, যেমনটা আমি বলেছিলাম, আপনাকে অতিরিক্ত নিয়ম যুক্ত করতে হবে যা সেই সমস্ত নিদর্শনগুলির সাথে মেলে। আপনার সেটআপে এই URL গুলি দেখতে কেমন তা আমি জানি না।
মিলো

আমার 'প্রজেক্টস' নামে একটি কাস্টম পৃষ্ঠার ধরণ রয়েছে যার একটি সংরক্ষণাগার এবং একক পৃষ্ঠাগুলি রয়েছে। আপনি কি তার জন্য একটি উদাহরণ দিতে পারেন, এবং আমি অন্যান্য সমস্ত করতে পারি?
লুই

এছাড়াও, এটি সাব-পৃষ্ঠাগুলির জন্য কাজ করে বলে মনে হচ্ছে না।
লুই

1
নিয়মের প্রয়োজন এমন প্রতিটি URL প্যাটার্নের উদাহরণ যুক্ত করতে আপনার প্রশ্নটি সম্পাদনা করুন। আমি আমার উত্তর গৃহীত হওয়ার বিষয়ে সত্যই উদ্বিগ্ন নই, কখনও কখনও আমি তাদের কিছু দিয়ে শুরু করার মাধ্যমে তাদের নিজের প্রশ্নের উত্তর দেওয়ার জন্য প্রতারিত করতে পারি।
মিলো

6

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

অগণিত পরিবর্তন এবং পারমিলিকগুলি রিফ্রেশ করার পরে আমি বুঝতে পেরেছিলাম add_rewrite_url এর বাইরে ইউআরএলগুলি বের করা আরও সহজ এবং তারা একবার কাজ করলে পুনরায় লেখার সংজ্ঞা দেয়। উদাহরণ হচ্ছে index.php?param=foo&post_type=example_type

অন্য একটি সুস্পষ্ট জিনিস, তবে এটি এখানে যুক্ত করা যাতে এটি অন্য কারও পক্ষে সহায়তা করতে পারে। আপনার পৃষ্ঠা / উপ-পৃষ্ঠার ওয়াইল্ডকার্ড নিয়মগুলি সংজ্ঞায়িত করার আগে আপনাকে অবশ্যই কাস্টম পোস্টের প্রকারের add_rewrite_rule বিধিগুলি নির্ধারণ করতে হবে। আমি সেইটির সাথে বেশ কিছুটা সময় নষ্ট করেছিলাম এবং এটি মনে করি এটিই মূল বিষয় যা আমাকে কেন বিধিগুলি কাজ করে না তা বুঝতে না পেরেছিল।

এখানে 3 টি নিয়ম রয়েছে যা আমার সমস্ত প্রয়োজন জুড়ে কাজ করে। পৃষ্ঠা / উপ-পৃষ্ঠা নিয়মটি একক মধ্যে একত্রিত হয়েছিল।

// Custom Post Archive
add_rewrite_rule(
    '^foo/example_type/?$',
    'index.php?param=foo&post_type=example_type',
    'top'
    );

// Custom Post Individual
add_rewrite_rule(
    '^foo/example_type/([^/]*)/?$',
    'index.php?param=foo&example_type=$matches[1]',
    'top'
    );

// Pages, Top-Level and Sub-Pages
// This MUST be placed in the code AFTER custom post add_rewrite_rule
add_rewrite_rule(
    '^foo/(.+)/?$',    
    'index.php?param=foo&pagename=$matches[1]',
    'top'
    );

অতিরিক্তভাবে আমি যা করেছি তা হ'ল একাধিক কাস্টম পোস্ট ধরণের বিধি যুক্ত করতে একটি লুপ সেট আপ করা। মনে রাখবেন, আপনার পৃষ্ঠা / উপ-পৃষ্ঠার ওয়াইল্ডকার্ড নিয়মগুলি সংজ্ঞায়নের আগে আপনাকে অবশ্যই কাস্টম পোস্টের প্রকারের add_rewrite_rule বিধিগুলি নির্ধারণ করতে হবে।

$custom_types = array('example_type', 'projects', 'people');

foreach($custom_types as $type) {

    // Custom Post Archive
    add_rewrite_rule(
        '^foo/'.$type.'/?$',
        'index.php?param=foo&post_type='.$type,
        'top'
        );

    // Custom Post Individual
    add_rewrite_rule(
        '^foo/'.$type.'/([^/]*)/?$',
        'index.php?param=foo&'.$type.'=$matches[1]',
        'top'
        );

}

ওয়ার্ডপ্রেস কীভাবে পৃষ্ঠা / পোস্টগুলির জন্য অনুসন্ধান করে তা আরও ভাল করে বোঝার চেষ্টা করার সময় মিলো যে রাইরাইট বিশ্লেষকটি পাশ দিয়েছিল তা বেশ সহায়ক হয়েছিল।


শোতে দেরীতে, তবে আমি কি আপনাকে অন্য উদাহরণের জন্য পিং করতে পারি? মনে মনে, আমি অ্যাড_রেইট_রুলের $ ট্যাগ প্যারামিটারটি পুরোপুরি বুঝতে পারি না। এর অর্থ কী তা সম্পর্কে কোনও ধারণা নেই। বা পৃষ্ঠা নাম = $ মিলগুলি [1] 'ব্যবহার করে আমি উদাহরণটি বুঝতে পারি না। ওহো ??? আমার ডোমেন.com/detail?id=2&it=3 এর মতো একটি URL আছে। আমি পৃষ্ঠাটি ডোমেইন ডটকম / ডিটেইল / ২-৩/৩ হতে চাই। তুমি কি ইচ্ছুক?
ডেবি কুর্থ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.