यहां जवाबों के माध्यम से मुझे लगता है कि एक बेहतर समाधान के लिए जगह है जो कुछ चीजों को जोड़ती है जो मैंने ऊपर सीखा है और ऑटो-डिटेक्शन और डुप्लिकेट स्लग की रोकथाम को जोड़ता है।
नोट: सुनिश्चित करें कि आपने नीचे दिए मेरे उदाहरण में अपने स्वयं के CPT नाम के लिए 'custom_post_type' को बदल दिया है। कई घटनाएँ हैं, और उन सभी को पकड़ने का एक आसान तरीका 'ढूंढना / बदलना' है। इस कोड के सभी अपने functions.php या एक plugin में जा सकते हैं।
चरण 1: जब आप पोस्ट को पंजीकृत करते हैं, तब 'राइट' लिखकर अपने कस्टम पोस्ट प्रकार पर फिर से लिखें।
register_post_type( 'custom_post_type',
array(
'rewrite' => false
)
);
चरण 2: मैन्युअल रूप से हमारे कस्टम रीराइट को वर्डप्रेस के नीचे से जोड़कर हमारे कस्टम_पोस्ट_टाइप के लिए फिर से लिखता है
function custom_post_type_rewrites() {
add_rewrite_rule( '[^/]+/attachment/([^/]+)/?$', 'index.php?attachment=$matches[1]', 'bottom');
add_rewrite_rule( '[^/]+/attachment/([^/]+)/trackback/?$', 'index.php?attachment=$matches[1]&tb=1', 'bottom');
add_rewrite_rule( '[^/]+/attachment/([^/]+)/feed/(feed|rdf|rss|rss2|atom)/?$', 'index.php?attachment=$matches[1]&feed=$matches[2]', 'bottom');
add_rewrite_rule( '[^/]+/attachment/([^/]+)/(feed|rdf|rss|rss2|atom)/?$', 'index.php?attachment=$matches[1]&feed=$matches[2]', 'bottom');
add_rewrite_rule( '[^/]+/attachment/([^/]+)/comment-page-([0-9]{1,})/?$', 'index.php?attachment=$matches[1]&cpage=$matches[2]', 'bottom');
add_rewrite_rule( '[^/]+/attachment/([^/]+)/embed/?$', 'index.php?attachment=$matches[1]&embed=true', 'bottom');
add_rewrite_rule( '([^/]+)/embed/?$', 'index.php?custom_post_type=$matches[1]&embed=true', 'bottom');
add_rewrite_rule( '([^/]+)/trackback/?$', 'index.php?custom_post_type=$matches[1]&tb=1', 'bottom');
add_rewrite_rule( '([^/]+)/page/?([0-9]{1,})/?$', 'index.php?custom_post_type=$matches[1]&paged=$matches[2]', 'bottom');
add_rewrite_rule( '([^/]+)/comment-page-([0-9]{1,})/?$', 'index.php?custom_post_type=$matches[1]&cpage=$matches[2]', 'bottom');
add_rewrite_rule( '([^/]+)(?:/([0-9]+))?/?$', 'index.php?custom_post_type=$matches[1]', 'bottom');
add_rewrite_rule( '[^/]+/([^/]+)/?$', 'index.php?attachment=$matches[1]', 'bottom');
add_rewrite_rule( '[^/]+/([^/]+)/trackback/?$', 'index.php?attachment=$matches[1]&tb=1', 'bottom');
add_rewrite_rule( '[^/]+/([^/]+)/feed/(feed|rdf|rss|rss2|atom)/?$', 'index.php?attachment=$matches[1]&feed=$matches[2]', 'bottom');
add_rewrite_rule( '[^/]+/([^/]+)/(feed|rdf|rss|rss2|atom)/?$', 'index.php?attachment=$matches[1]&feed=$matches[2]', 'bottom');
add_rewrite_rule( '[^/]+/([^/]+)/comment-page-([0-9]{1,})/?$', 'index.php?attachment=$matches[1]&cpage=$matches[2]', 'bottom');
add_rewrite_rule( '[^/]+/([^/]+)/embed/?$', 'index.php?attachment=$matches[1]&embed=true', 'bottom');
}
add_action( 'init', 'custom_post_type_rewrites' );
नोट: अपनी आवश्यकताओं के आधार पर, आप उपरोक्त पुनर्लेखनों को संशोधित करना चाहते हैं (ट्रैकबैक फ़ीड को अक्षम कर सकते हैं ?, आदि)। यदि आप चरण 1 में पुनर्लेखन को अक्षम नहीं करते हैं, तो यह 'डिफ़ॉल्ट' प्रकार के पुनर्लेखन का प्रतिनिधित्व करता है
चरण 3: फिर से अपने कस्टम पोस्ट प्रकार 'सुंदर' के लिए पर्मलिंक बनाएं
function custom_post_type_permalinks( $post_link, $post, $leavename ) {
if ( isset( $post->post_type ) && 'custom_post_type' == $post->post_type ) {
$post_link = home_url( $post->post_name );
}
return $post_link;
}
add_filter( 'post_type_link', 'custom_post_type_permalinks', 10, 3 );
नोट: यदि आप अपने उपयोगकर्ताओं को किसी अन्य पोस्ट प्रकार में एक विरोधाभासी (डुप्लिकेट) पोस्ट बनाने के बारे में चिंतित नहीं हैं, तो आप यहां रुक सकते हैं, ऐसी स्थिति पैदा होगी जहां पेज अनुरोध किए जाने पर उनमें से केवल एक लोड हो सकता है।
चरण 4: डुप्लिकेट पोस्ट स्लग को रोकें
function prevent_slug_duplicates( $slug, $post_ID, $post_status, $post_type, $post_parent, $original_slug ) {
$check_post_types = array(
'post',
'page',
'custom_post_type'
);
if ( ! in_array( $post_type, $check_post_types ) ) {
return $slug;
}
if ( 'custom_post_type' == $post_type ) {
// Saving a custom_post_type post, check for duplicates in POST or PAGE post types
$post_match = get_page_by_path( $slug, 'OBJECT', 'post' );
$page_match = get_page_by_path( $slug, 'OBJECT', 'page' );
if ( $post_match || $page_match ) {
$slug .= '-duplicate';
}
} else {
// Saving a POST or PAGE, check for duplicates in custom_post_type post type
$custom_post_type_match = get_page_by_path( $slug, 'OBJECT', 'custom_post_type' );
if ( $custom_post_type_match ) {
$slug .= '-duplicate';
}
}
return $slug;
}
add_filter( 'wp_unique_post_slug', 'prevent_slug_duplicates', 10, 6 );
नोट: यह किसी भी डुप्लिकेट स्लग के अंत में स्ट्रिंग '-duplicate' को जोड़ देगा। यह कोड डुप्लिकेट स्लग को रोक नहीं सकता है यदि वे इस समाधान को लागू करने से पहले से मौजूद हैं। पहले डुप्लिकेट के लिए जांच करना सुनिश्चित करें।
मैं किसी और से वापस सुनना पसंद करूंगा जो इसे देखने के लिए जाता है कि क्या यह उनके लिए भी अच्छा काम करता है।