কীভাবে কাস্টম ইউআরএল রুট তৈরি করবেন?


50

আমার খুব অদ্ভুত প্রয়োজন আছে, আশা করি, আমি খুব বিভ্রান্ত না হয়ে এটি ব্যাখ্যা করতে পারি। আমি একটি পৃষ্ঠা টেমপ্লেট তৈরি করেছি যেখানে আমি বাহ্যিক এক্সএমএল ফাইল থেকে প্রাপ্ত কিছু সম্পত্তি তালিকাবদ্ধ করেছি, এখন পর্যন্ত কোনও সমস্যা নেই, আসুন ইউআরএল এর মত:

http://www.example.com/properties/

প্রতিটি সম্পত্তির একটি লিঙ্ক রয়েছে যা ব্যবহারকারীকে "একক সম্পত্তি" পৃষ্ঠায় পুনর্নির্দেশ করা উচিত যা এটি সম্পর্কে আরও তথ্য প্রদর্শন করে। আমি ভাবছিলাম এই লিঙ্কটি তৈরির উপায় আছে কিনা:

http://www.example.com/properties/123

যেখানে 123সম্পত্তি আইডি হবে। সুতরাং যদি আমার মতো ইউআরএল থাকে তবে properties/some_idআমি চাই একটি ভিউ ফাইল (যেমন single.phpবা page.phpফাইলগুলির মতো) লোড করতে সক্ষম হতে চাই তবে এই ইউআরএল শর্তের সাথে নির্দিষ্ট।

এটা কি সম্ভব?

উত্তর:


57

এটি আপনার থিমের ফাংশন.এফপিতে যুক্ত করুন বা এটি একটি প্লাগইনে রাখুন

add_action( 'init', 'wpse26388_rewrites_init' );
function wpse26388_rewrites_init(){
    add_rewrite_rule(
        'properties/([0-9]+)/?$',
        'index.php?pagename=properties&property_id=$matches[1]',
        'top' );
}

add_filter( 'query_vars', 'wpse26388_query_vars' );
function wpse26388_query_vars( $query_vars ){
    $query_vars[] = 'property_id';
    return $query_vars;
}

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

আপনার page-properties.phpটেমপ্লেটে, get_query_var('property_id')সম্পত্তি আইডি সেট করা থাকলে ফিরিয়ে দেবে, যদি তা না হয় তবে ডিফল্ট বৈশিষ্ট্য পৃষ্ঠাটি প্রদর্শন করা হয়।


4
এটি আমার পক্ষে কাজ করার জন্য বন্ধ ছিল তবে আমার যুক্ত করতে হবে: add_filter ('init', 'flushRules'); ফাংশন ফ্লাশরুলস () {গ্লোবাল $ ডাব্লুপিওউরাইট; $ wp_rewrite-> flush_rules (); }
টোশেল

19
@ টুশেল আপনি অবশ্যই প্রতিটি অনুরোধের উপর নিয়মগুলি ফ্লাশ করতে চান না, এটি একটি ব্যয়বহুল অপারেশন এবং আপনার সাইটটি ক্রল পর্যন্ত ধীর করবে will আপনার কেবল একবার প্লাগইন অ্যাক্টিভেশন বা নিয়মিত permalink সেটিংস পৃষ্ঠাতে গিয়ে নিয়ম ফ্লাশ করা প্রয়োজন।
মিলো

হ্যাঁ, আমি এটি পেয়েছি । । তবে আপনি যখন পরীক্ষা করছেন তখন এটি খুব সুন্দর যে সেখানে রয়েছে!
তোশেল

3
একটি স্মার্ট পুনর্লিখন url regexp হতে পারে ^properties/([0-9]+)/?। অন্যথায় এটি কিছু মিলবেexample/properties/1
রায়ান টেইলর

@ রায়ানটেলর আপনি কি এটি সম্পর্কে নিশ্চিত? example/properties/1যখন আমি এটি পরীক্ষা করি তখন এটি ক্যাপচার হয় না ।
মিলো

9

এটি করার আরেকটি উপায়:

add_action('init', function() {
    add_rewrite_rule( '^properties/([0-9]+)/?',
                      'index.php?pagename=properties&property_id=$matches[1]',
                      'top' );
}, 10, 0);

add_action('init', function() {
    add_rewrite_tag( '%property_id%', '([^&]+)' );
}, 10, 0);

কোডেক্স পুনর্লিখনের এপিআই / পুনর্লিখনের নিয়ম যুক্ত করুন

কোডেক্স পুনর্লিখনের এপিআই / পুনরায় লেখার ট্যাগ যুক্ত করুন


2
গৃহীত উত্তরটি 4.7 (এবং 4.8) এর সাথে কাজ করে, আপনি কেন এটি ভাবেন না তা নিশ্চিত নয়। আপনার কোডটি মূলত একই জিনিসটি করছে, ফিল্টার add_rewrite_tagহিসাবে একই অ্যারেতে ক্যোয়ারী ভার যোগ করে query_vars
মিলো

@ মিলো সম্ভবত এটি আমার পক্ষে কাজ করে নি, তবে আমার আর কোনও 4.7 হস্ত নেই তাই আমি চেক করতে পারি না। আমি আমার উত্তর সম্পাদনা করব।
খ্রিস্টান লেসকিউয়ার

@ মেলো যদিও আমি ব্যক্তিগতভাবে পুনরায় লেখার ট্যাগ পছন্দ করি তবে এখনও স্বীকৃত উত্তরটি পরীক্ষা করে দেখে এটি কার্যকর হয়। যদিও কিছু ব্যক্তিগত স্বাদ।
জ্যাক জোহানসন

1
@ জ্যাকজোহানসন পুনরায় লেখার ট্যাগগুলি যখন আপনি এটি পরমাস্ট্রাক্টে ব্যবহার করছেন তখন প্রয়োজনীয় । এটি কেবলমাত্র একটি অতিরিক্ত বিট যা এই ক্ষেত্রে ওয়ার্ডপ্রেস কখনও ব্যবহার করে না।
মিলো

উভয় নিয়ম একই পদ্ধতিতে যুক্ত করা যেতে পারে, ক্লিনার এবং আরও দরকারী কার্যক্রমে শেষ হয়ে ফিরে আসা এবং রক্ষণাবেক্ষণের কাজটি করা হচ্ছে কিনা তা নির্ধারণ করার জন্য
ebleleste
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.