सबसे पहले अगर आप टैक्सोनॉमी मेटाबॉक्स को केवल कस्टम पोस्ट प्रकार को दिखाना चाहते हैं, तो टैक्सोनॉमी को केवल उस कस्टम पोस्ट प्रकार को रजिस्टर करें जैसे कि कस्टम पोस्ट टाइप नाम को रजिस्टर_टैक्सोनॉमी में तर्क के रूप में पास करें। ऐसा करने से टैक्सोनॉमी मेटाबॉक्स केवल कस्टम पोस्ट प्रकार के लिए प्रकट होता है। यदि आप कस्टम पोस्ट प्रकार के लिए श्रेणी मेटाबॉक्स दिखाना नहीं चाहते हैं, तो कस्टम पोस्ट प्रकार दर्ज करते समय शब्द श्रेणी को तर्क के रूप में हटा दें और इसके बजाय इस 'टैक्सोनॉमीज़' => सरणी ('पोस्ट_टैग', 'your_taxonomy_name') जैसे टैक्सोनॉमी स्लग का नाम शामिल करें। । यहाँ कोड है कि मैंने कैसे हासिल किया। मैंने कस्टम पोस्ट टाइप थीम के तहत स्लग theme_categories के साथ एक कस्टम टैक्सोनॉमी दर्ज की है
function themes_taxonomy() {
register_taxonomy(
'themes_categories', //The name of the taxonomy. Name should be in slug form (must not contain capital letters or spaces).
'themes', //post type name
array(
'hierarchical' => true,
'label' => 'Themes store', //Display name
'query_var' => true,
'rewrite' => array(
'slug' => 'themes', // This controls the base slug that will display before each term
'with_front' => false // Don't display the category base before
)
)
);
}
add_action( 'init', 'themes_taxonomy');
फिर मैं निम्नलिखित फ़ंक्शन द्वारा बनाई गई पर्मलिंक को बदलने के लिए
function filter_post_type_link($link, $post)
{
if ($post->post_type != 'themes')
return $link;
if ($cats = get_the_terms($post->ID, 'themes_categories'))
$link = str_replace('%themes_categories%', array_pop($cats)->slug, $link);
return $link;
}
add_filter('post_type_link', 'filter_post_type_link', 10, 2);
फिर मैंने नीचे के रूप में स्लग थीम के साथ एक कस्टम पोस्ट प्रकार पंजीकृत किया
//Registering Custom Post Type Themes
add_action( 'init', 'register_themepost', 20 );
function register_themepost() {
$labels = array(
'name' => _x( 'Themes', 'my_custom_post','custom' ),
'singular_name' => _x( 'Theme', 'my_custom_post', 'custom' ),
'add_new' => _x( 'Add New', 'my_custom_post', 'custom' ),
'add_new_item' => _x( 'Add New ThemePost', 'my_custom_post', 'custom' ),
'edit_item' => _x( 'Edit ThemePost', 'my_custom_post', 'custom' ),
'new_item' => _x( 'New ThemePost', 'my_custom_post', 'custom' ),
'view_item' => _x( 'View ThemePost', 'my_custom_post', 'custom' ),
'search_items' => _x( 'Search ThemePosts', 'my_custom_post', 'custom' ),
'not_found' => _x( 'No ThemePosts found', 'my_custom_post', 'custom' ),
'not_found_in_trash' => _x( 'No ThemePosts found in Trash', 'my_custom_post', 'custom' ),
'parent_item_colon' => _x( 'Parent ThemePost:', 'my_custom_post', 'custom' ),
'menu_name' => _x( 'Themes Posts', 'my_custom_post', 'custom' ),
);
$args = array(
'labels' => $labels,
'hierarchical' => false,
'description' => 'Custom Theme Posts',
'supports' => array( 'title', 'editor', 'excerpt', 'author', 'thumbnail', 'comments', 'revisions', 'post-formats', 'custom-fields' ),
'taxonomies' => array( 'post_tag','themes_categories'),
'show_ui' => true,
'show_in_menu' => true,
'menu_position' => 5,
'menu_icon' => get_stylesheet_directory_uri() . '/functions/panel/images/catchinternet-small.png',
'show_in_nav_menus' => true,
'publicly_queryable' => true,
'exclude_from_search' => false,
'query_var' => true,
'can_export' => true,
'rewrite' => array('slug' => 'themes/%themes_categories%','with_front' => FALSE),
'public' => true,
'has_archive' => 'themes',
'capability_type' => 'post'
);
register_post_type( 'themes', $args );//max 20 charachter cannot contain capital letters and spaces
}
कस्टम पोस्ट रजिस्टर करते समय आपको कुछ बातें याद रखनी हैं। कस्टम पोस्ट प्रकार स्लग नाम के लिए has_archive पैरामीटर बदलें और दूसरा 'स्लग' => 'custom_post_type_slug /% taxonomy_slug% के रूप में फिर से लिखना स्लग नाम को बदलें
अब जब आप लिखने के बाद के प्रकार पृष्ठ में एक नया पोस्ट प्रकार जोड़ते हैं ... तो आपको http://www.example.com/wordpress/themes/%themes_categories%/post-name/ के रूप में अनुमति दिखाई देगी
। यदि इस पद के लिए कस्टम टैक्सोनॉमी का चयन नहीं किया जाता है, तो पर्मलिंक http://www.example.com/wordpress/themes/%themes_categories%/post-name/ रहेगा जो तब खराब अनुरोध दिखाएगा। इसे ठीक करने के लिए हम कस्टम टैक्सोनॉमी में एक डिफ़ॉल्ट शब्द बनाते हैं। (श्रेणियों में समान श्रेणीबद्ध) इसे functions.php में जोड़ें
function default_taxonomy_term( $post_id, $post ) {
if ( 'publish' === $post->post_status ) {
$defaults = array(
'themes_categories' => array( 'other'), //
);
$taxonomies = get_object_taxonomies( $post->post_type );
foreach ( (array) $taxonomies as $taxonomy ) {
$terms = wp_get_post_terms( $post_id, $taxonomy );
if ( empty( $terms ) && array_key_exists( $taxonomy, $defaults ) ) {
wp_set_object_terms( $post_id, $defaults[$taxonomy], $taxonomy );
}
}
}
}
add_action( 'save_post', 'default_taxonomy_term', 100, 2 );
अब जब कस्टम टैक्सोनॉमी को खाली छोड़ दिया जाता है तो permlaink http://www.example.com/wordpress/themes/other/post-name/ अपने आप बन जाता है
।
अंत में एडमिन सेक्शन में पर्मलिंक सेटिंग में सेव चेंजेस पर क्लिक करके रीराइट को फ्लश करना न भूलें अन्यथा आप 404 एरर में रिडायरेक्ट हो जाएंगे। आशा है कि यह आपकी मदद करता है।