Trước hết, nếu bạn muốn chỉ hiển thị metabox phân loại cho loại bài đăng tùy chỉnh thì hãy đăng ký phân loại chỉ loại bài đăng tùy chỉnh đó bằng cách chuyển tên loại bài đăng tùy chỉnh làm đối số trong register_taxonomy. Bằng cách này, metabox phân loại chỉ xuất hiện cho loại bài tùy chỉnh. Nếu bạn không muốn hiển thị metabox danh mục cho loại bài đăng tùy chỉnh thì hãy xóa danh mục thuật ngữ làm đối số trong khi đăng ký loại bài đăng tùy chỉnh và thay vào đó bao gồm tên sên phân loại như 'phân loại' => mảng ('post_tag', 'your_taxonomy_name') . Đây là mã làm thế nào tôi đạt được điều đó. Tôi đã đăng ký phân loại tùy chỉnh với các chủ đề slug theo các chủ đề theo loại bài đăng tùy chỉnh
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');
Sau đó, để thay đổi permalink tôi đã tạo ra chức năng sau đây
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);
Sau đó, tôi đã đăng ký một loại bài đăng tùy chỉnh với các chủ đề sên như dưới đây
//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
}
Có một vài điều bạn phải nhớ trong khi đăng ký bài tùy chỉnh. thay đổi tham số has_archive thành tên sên loại bài tùy chỉnh và một tên khác là thay đổi tên sên viết lại thành 'slug' => 'custom_post_type_slug /% taxonomy_slug%
Bây giờ khi bạn thêm một loại bài đăng mới trong trang loại bài viết ... bạn sẽ thấy permalink là http://www.example.com/wordpress/theme/%theme_c Ab% / post-name /
. Nếu phân loại tùy chỉnh cho bài đăng này không được chọn thì permalink sẽ vẫn là http://www.example.com/wordpress/theme/%theme_clists%/post-name/ sau đó sẽ hiển thị một yêu cầu xấu. Để sửa lỗi này, chúng tôi tạo một thuật ngữ mặc định trong phân loại tùy chỉnh. (giống như chưa được phân loại trong danh mục) Thêm phần này vào hàm.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 );
Bây giờ khi phân loại tùy chỉnh bị bỏ trống, permlaink sẽ tự động trở thành
http://www.example.com/wordpress/theme/other/post-name/ .
Cuối cùng, đừng quên viết lại bằng cách nhấp vào lưu thay đổi trong cài đặt permalink trong phần quản trị nếu không bạn sẽ được chuyển hướng đến lỗi 404. Hy vọng điều này sẽ giúp bạn.