आपको तीन महत्वपूर्ण काम करने होंगे:
- पास किए गए मानों में URI के कुछ हिस्सों को चालू करने के लिए एक कस्टम पुनर्लेखन नियम बनाएँ
index.php ।
- जोड़ना
myroute और myargumentवर्डप्रेस के प्रश्न चर श्वेत सूची, ताकि वर्डप्रेस सिर्फ उन्हें अनदेखा नहीं करता है, जब वे एक क्वेरी स्ट्रिंग में प्रदर्शित करने के।
- फिर से लिखना नियमों को फ्लश करें।
सबसे पहले, मैं यह सिफारिश करने जा रहा हूं कि इसके बजाय http://www.example.org/myroute/myargument, आप यूआरआई को इन विशेष 'मार्गों' में से एक माना जाना चाहिए। इस उदाहरण के लिए, मैंने उपसर्ग चुना है api, ताकि यह होगा http://www.example.org/api/myroute/myargument। मैंने चुनाapi क्योंकि जब मैंने कुछ RESTful किया, जैसे कि आप जो काम कर रहे हैं, वह एक एपीआई के लिए था।
कोड
add_filter( 'rewrite_rules_array', 'my_insert_rewrite_rules' );
add_filter( 'query_vars', 'my_insert_query_vars' );
add_action( 'wp_loaded', 'my_flush_rules' );
// flush_rules() if our rules are not yet included
function my_flush_rules() {
$rules = get_option( 'rewrite_rules' );
if ( ! isset( $rules['api/(.*?)/(.+?)'] ) ) {
global $wp_rewrite;
$wp_rewrite->flush_rules();
}
}
// Adding a new rule
function my_insert_rewrite_rules( $rules ) {
$newrules = array();
$newrules['api/(.*?)/(.+?)'] = 'index.php?myroute=$matches[1]&myargument=$matches[2]';
return $newrules + $rules;
}
// Adding the id var so that WP recognizes it
function my_insert_query_vars( $vars ) {
array_push( $vars, 'myroute', 'myargument' );
return $vars;
}
त्वरित ब्रेकडाउन
यह सब काफी सीधे आगे है। रीजैक्स पैटर्न को वर्डप्रेस में सभी रीराइट नियमों की एक सूची में जोड़ा गया है, और आपका कस्टम पैटर्न सूची में सबसे ऊपर है। जब पैटर्न का मिलान किया जाता है, तो वर्डप्रेस फिर से लिखना नियमों की सूची के माध्यम से देखना बंद कर देगा, और रेगेक्स के कैप्चर किए गए मानों को संदर्भ में ( $matches[1]और $matches[2]) क्वेरी स्ट्रिंग में पास का उपयोग करेगा।index.php ।
क्वेरी चर myrouteऔर myargumentश्वेतसूची में जोड़ने से वर्डप्रेस केवल उन्हें त्यागने के बजाय उन पर ध्यान देता है।
अपने कस्टम मार्ग 'नामस्थान' का वैकल्पिक तरीका
यदि आप /api/उपसर्ग के रूप में उपयोग करने से बचना चाहते हैं , तो आप इसके बजाय एक क्वेरी स्ट्रिंग चर / क्षेत्र का उपयोग कर सकते हैं। ऐसा कुछ करने के लिए, आप regex को कुछ इस तरह से बदल देंगे (.*?)/(.+?)\\?api=1और फिर कॉल किए गए apiअतिरिक्त पैरामीटर के रूप में जोड़ देंगेarray_push()my_insert_query_vars() ।
यह कस्टम मार्ग को बदल देगा ताकि यह किसी भी समय ट्रिगर हो सके api=1क्वेरी स्ट्रिंग का पहला तत्व है, जैसे यह इसके लिए ट्रिगर होगाhttp://example.com/anytext/anytext?api=1 ।
'नेमस्पेसिंग' शब्द के इस्तेमाल को नजरअंदाज करें - बस इसका इस्तेमाल संक्षिप्तता के लिए करें।
यदि आप किसी उपसर्ग या प्रत्यय के साथ 'नेमस्पेस' नहीं रखते हैं, तो आप URI पैटर्न से टकराकर समाप्त हो जाएंगे। ऐसा इसलिए है क्योंकि वर्डप्रेस के पास आपके कस्टम पैटर्न को किसी पोस्ट या पेज से अलग करने का कोई तरीका नहीं होगा। वर्डप्रेस को यह कैसे पता चलेगाmyroute यह एक वर्गीकरण, शब्द या मूल पृष्ठ नहीं है?
उम्मीद है की यह मदद करेगा।
my_insert_rewrite_rulesपरिभाषा के पालन में परिभाषित नियम ! सबसे लंबे समय तक नियम से शुरू करें, फिर सबसे सरल तरीके से काम करें, अन्यथा / एपीआई / म्युटी ओवरराइड / अपी / म्यरौटी / मायारग्यूमेंट को ओवरराइड करेगा।