जब आप कस्टम पोस्ट टाइप रीराइट नियम जोड़ रहे हों तो कवर करने के लिए हमले के 2 बिंदु हैं:
नियमों को फिर से लिखना
यह तब होता है जब पुनर्लेखन नियमों को उत्पन्न किया जा रहा wp-includes/rewrite.php
है WP_Rewrite::rewrite_rules()
। वर्डप्रेस आपको पोस्ट, पेज और विभिन्न प्रकार के संग्रह जैसे विशिष्ट तत्वों के लिए फिर से लिखना नियमों को फ़िल्टर करने की अनुमति देता है। जहाँ आप देखते हैं posttype_rewrite_rules
कि posttype
भाग आपके कस्टम पोस्ट प्रकार का नाम होना चाहिए। वैकल्पिक रूप से आप post_rewrite_rules
फ़िल्टर का उपयोग तब तक कर सकते हैं जब तक कि आप मानक पोस्ट नियमों को भी नहीं दोहराते हैं।
अगला हमें वास्तव में फिर से लिखना नियम बनाने के लिए फ़ंक्शन की आवश्यकता है:
// add our new permastruct to the rewrite rules
add_filter( 'posttype_rewrite_rules', 'add_permastruct' );
function add_permastruct( $rules ) {
global $wp_rewrite;
// set your desired permalink structure here
$struct = '/%category%/%year%/%monthnum%/%postname%/';
// use the WP rewrite rule generating function
$rules = $wp_rewrite->generate_rewrite_rules(
$struct, // the permalink structure
EP_PERMALINK, // Endpoint mask: adds rewrite rules for single post endpoints like comments pages etc...
false, // Paged: add rewrite rules for paging eg. for archives (not needed here)
true, // Feed: add rewrite rules for feed endpoints
true, // For comments: whether the feed rules should be for post comments - on a singular page adds endpoints for comments feed
false, // Walk directories: whether to generate rules for each segment of the permastruct delimited by '/'. Always set to false otherwise custom rewrite rules will be too greedy, they appear at the top of the rules
true // Add custom endpoints
);
return $rules;
}
यहां देखने के लिए मुख्य बात यह है कि अगर आप खेलने का फैसला करते हैं तो 'वॉक डाइरेक्टरीज़' बूलियन है। यह एक क्रम के प्रत्येक खंड के लिए फिर से लिखना नियम बनाता है और नियम के बेमेल को फिर से लिख सकता है। जब एक WordPress URL का अनुरोध किया जाता है, तो नियम फिर से लिखे जाते हैं। जैसे ही एक मैच मिलता है, यह लोड हो जाएगा जो कुछ भी यह उदाहरण के लिए भर में आ गया है यदि आपके परमिटस्ट्रक्चर में एक लालची मैच है जैसे। के लिए /%category%/%postname%/
और चलना निर्देशिका है यह दोनों के लिए नियमों को फिर से लिखना होगा /%category%/%postname%/
और /%category%/
जो कुछ भी मेल खाएगा। अगर ऐसा होता है तो आप बहुत जल्दी खराब हो जाते हैं।
स्थायी लिंक में
यह वह फ़ंक्शन है जो पोस्ट प्रकार के पर्मलिंक्स को पार्स करता है और एक वास्तविक URL में एक परमास्ट्रक्ट (जैसे '/% वर्ष% /% माहनाम% /% पोस्टनाम% /') को कनवर्ट करता है।
अगला भाग इस बात का एक सरल उदाहरण है कि आदर्श रूप get_permalink()
में पाए जाने वाले फ़ंक्शन का एक संस्करण क्या होगा wp-includes/link-template.php
। कस्टम पोस्ट पर्मलिंक्स उत्पन्न होती हैं get_post_permalink()
जिसके द्वारा संस्करण के बहुत नीचे पानी डाला जाता है get_permalink()
। get_post_permalink()
द्वारा फ़िल्टर किया जाता है, post_type_link
इसलिए हम कस्टम परमैस्ट्रक्चर बनाने के लिए इसका उपयोग कर रहे हैं।
// parse the generated links
add_filter( 'post_type_link', 'custom_post_permalink', 10, 4 );
function custom_post_permalink( $permalink, $post, $leavename, $sample ) {
// only do our stuff if we're using pretty permalinks
// and if it's our target post type
if ( $post->post_type == 'posttype' && get_option( 'permalink_structure' ) ) {
// remember our desired permalink structure here
// we need to generate the equivalent with real data
// to match the rewrite rules set up from before
$struct = '/%category%/%year%/%monthnum%/%postname%/';
$rewritecodes = array(
'%category%',
'%year%',
'%monthnum%',
'%postname%'
);
// setup data
$terms = get_the_terms($post->ID, 'category');
$unixtime = strtotime( $post->post_date );
// this code is from get_permalink()
$category = '';
if ( strpos($permalink, '%category%') !== false ) {
$cats = get_the_category($post->ID);
if ( $cats ) {
usort($cats, '_usort_terms_by_ID'); // order by ID
$category = $cats[0]->slug;
if ( $parent = $cats[0]->parent )
$category = get_category_parents($parent, false, '/', true) . $category;
}
// show default category in permalinks, without
// having to assign it explicitly
if ( empty($category) ) {
$default_category = get_category( get_option( 'default_category' ) );
$category = is_wp_error( $default_category ) ? '' : $default_category->slug;
}
}
$replacements = array(
$category,
date( 'Y', $unixtime ),
date( 'm', $unixtime ),
$post->post_name
);
// finish off the permalink
$permalink = home_url( str_replace( $rewritecodes, $replacements, $struct ) );
$permalink = user_trailingslashit($permalink, 'single');
}
return $permalink;
}
जैसा कि यह एक कस्टम सरलीकृत नियम और पर्मलिंक बनाने के लिए एक बहुत ही सरलीकृत मामले का उल्लेख किया है, और विशेष रूप से लचीला नहीं है, लेकिन यह आपको शुरू करने के लिए पर्याप्त होना चाहिए।
धोखा दे
मैंने एक प्लगइन लिखा है जो आपको किसी भी कस्टम पोस्ट प्रकारों के लिए पर्मस्ट्रैक्ट्स को परिभाषित करने देता है, लेकिन जैसे आप पोस्टलिंक %category%
संरचना में उपयोग कर सकते हैं पोस्ट के लिए मेरा प्लगइन %custom_taxonomy_name%
किसी भी कस्टम टैक्सोनॉमी के लिए समर्थन करता है जो आपके पास भी है जहां custom_taxonomy_name
आपके टैक्सोनॉमी का नाम है। %club%
।
यह आप के पदानुक्रमित / गैर-पदानुक्रमित वर्गीकरणों के साथ अपेक्षा के अनुरूप काम करेगा।
http://wordpress.org/extend/plugins/wp-permastructure/