ก่อนอื่นถ้าคุณต้องการแสดง taxonomy metabox เฉพาะกับชนิดโพสต์ที่กำหนดเองจากนั้นลงทะเบียน taxonomy เฉพาะประเภทโพสต์ที่กำหนดเองนั้นโดยส่งชื่อโพสต์ประเภทกำหนดเองเป็นอาร์กิวเมนต์ใน register_taxonomy โดยการทำเช่นนี้ taxonomy metabox จะปรากฏเฉพาะกับประเภทโพสต์ที่กำหนดเอง หากคุณไม่ต้องการแสดงประเภท metabox ประเภทโพสต์ที่กำหนดเองแล้วลบหมวดหมู่คำว่าเป็นอาร์กิวเมนต์ในขณะที่ลงทะเบียนประเภทโพสต์ที่กำหนดเองและรวมถึงชื่อกระสุนอนุกรมวิธานเช่น 'taxonomies' => อาร์เรย์ ('post_tag', 'your_taxonomy_name') . นี่คือรหัสที่ฉันได้รับ ฉันได้ลงทะเบียน taxonomy แบบกำหนดเองด้วย slug themes_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');
จากนั้นให้เปลี่ยน Permalink ฉันได้สร้างฟังก์ชั่นต่อไปนี้
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 เป็นชื่อตัวบุ้งชนิดโพสต์ที่กำหนดเองและอีกอันคือเปลี่ยนชื่อตัวบุ้งเขียนใหม่เป็น 'slug' => '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 );
ตอนนี้เมื่อ taxonomy ที่กำหนดเองถูกปล่อยให้ว่าง permlaink จะกลายเป็น
http://www.example.com/wordpress/themes/other/post-name/ โดยอัตโนมัติ
ในที่สุดอย่าลืมที่จะล้างเขียนใหม่โดยคลิกที่บันทึกการเปลี่ยนแปลงในการตั้งค่า Permalink ในส่วนผู้ดูแลระบบมิฉะนั้นคุณจะถูกเปลี่ยนเส้นทางไป 404 ข้อผิดพลาด หวังว่านี่จะช่วยคุณได้