कस्टम URL रूट कैसे बनाएं?


50

मुझे बहुत ही अजीबोगरीब आवश्यकता है, उम्मीद है, मैं इसे बहुत उलझाए बिना समझा सकता हूं। मैंने एक पेज टेम्प्लेट बनाया, जहां मैं बाहरी एक्सएमएल फ़ाइल से प्राप्त कुछ गुणों को सूचीबद्ध करता हूं, अब तक कोई समस्या नहीं है, मान लीजिए कि URL इस तरह है:

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

प्रत्येक संपत्ति में एक लिंक होता है जो उपयोगकर्ता को "एकल संपत्ति" पृष्ठ पर पुनर्निर्देशित करना चाहिए जो इसके बारे में अधिक जानकारी प्रदर्शित करता है। मैं सोच रहा था कि क्या इस तरह से लिंक बनाने का कोई तरीका है:

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

123प्रॉपर्टी की आईडी कहां होगी। इसलिए अगर मेरे पास URL है जैसे properties/some_idमैं एक दृश्य फ़ाइल (जैसे single.phpया page.phpफ़ाइलें) लोड करने में सक्षम होना चाहता हूं, लेकिन इस URL स्थिति के लिए विशिष्ट है।

क्या यह संभव है?

जवाबों:


57

इसे अपने थीम के फंक्शन्स . php में जोड़ें, या इसे एक प्लगइन में डालें

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/pagename के बाद संख्या के किसी भी संयोजन के साथ अनुरोधों को निर्देशित करता है । बस अपने पर्मलिंक्स सेटिंग पेज पर जाना सुनिश्चित करें और नियमों को फिर से लिखने के लिए सहेजें, इसलिए यह नया नियम शामिल किया जाएगा।propertiesproperty_id

आपके page-properties.phpटेम्प्लेट में, get_query_var('property_id')यदि वह सेट किया गया था, तो प्रॉपर्टी आईडी वापस कर देगा, यदि यह तब डिफ़ॉल्ट गुण पृष्ठ नहीं दिखाता है।


4
यह मेरे लिए काम करने के लिए बंद था लेकिन मुझे जोड़ने की जरूरत थी: add_filter ('init', 'flushRules); समारोह flushRules () {वैश्विक $ wp_rewrite; $ wp_rewrite-> flush_rules (); }
तोशेल

19
@tooshel आप निश्चित रूप से हर अनुरोध पर नियमों को फ्लश नहीं करना चाहते हैं, यह एक महंगा ऑपरेशन है और आपकी साइट को क्रॉल में धीमा कर देगा। आपको केवल प्लगइन सक्रियण पर या पर्मलिंक सेटिंग पृष्ठ पर जाकर केवल एक बार नियमों को फ्लश करना होगा।
मिलो

हाँ, मैं समझ गया। । । लेकिन जब आप परीक्षण कर रहे हैं तो यह अच्छा है कि यह वहां है!
tooshel

3
एक होशियार फिर से लिखना url regexp हो सकता है ^properties/([0-9]+)/?। अन्यथा यह कुछ इस तरह से मेल खाता थाexample/properties/1
रयान टेलर

@RyanTaylor क्या आप इसके बारे में निश्चित हैं? 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 का काम नहीं है इसलिए मैं जांच नहीं कर सकता। मैं अपने उत्तर को संपादित करूंगा।
क्रिश्चियन Lescuyer

@ मिलो हालांकि मैं व्यक्तिगत रूप से टैग को फिर से लिखना पसंद करता हूं, लेकिन फिर भी स्वीकार किए गए उत्तर का परीक्षण किया और यह काम करता है। बस कुछ व्यक्तिगत स्वाद, हालांकि।
जैक जोहानसन

1
@JackJohansson फिर से लिखना तब आवश्यक होता है जब आप इसे किसी परमैस्ट्रक्ट में उपयोग कर रहे होते हैं । यह केवल एक अतिरिक्त डेटा है जो वर्डप्रेस इस मामले में कभी भी उपयोग नहीं करता है।
मिलो

दोनों नियमों को एक ही विधि में जोड़ा जा सकता है, एक क्लीनर और अधिक उपयोगी फ़ंक्शन को समाप्त करने और रखरखाव कार्य करने के लिए वापस आने और यह पता लगाने के लिए
eballeste
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.