Öncelikle, sadece özel yazı tipine taksonomi meta kutusunu göstermek istiyorsanız, özel yazı tipi ismini register_taxonomy değişkeninde argüman olarak ileterek taksonomiyi sadece bu özel yazı tipine kaydedin. Bunu yaparak taksonomi meta kutusu yalnızca özel yazı tipine görünür. Özel yazı türüne kategori meta kutusunu göstermek istemiyorsanız, özel yazı türünü kaydederken argüman olarak terim kategorisini kaldırın ve bunun yerine 'taksonomiler' => array ('post_tag', 'your_taxonomy_name') taksonomisi slug adını ekleyin. . İşte buna nasıl ulaştığım kod. Özel yazı tipi temaları altında, slug themes_categorileri ile özel bir taksonomi kaydettim.
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');
Daha sonra aşağıdaki fonksiyonu oluşturduğum permalinki değiştirmek
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);
Sonra slug temalarını içeren özel bir gönderi tipini aşağıdaki gibi kaydettim.
//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
}
Özel gönderiyi kaydederken hatırlamanız gereken birkaç şey var. has_archive parametresini özel yazı tipi slug adı olarak değiştirdikten sonra bir başkası, yeniden yazma slug adını 'slug' => 'olarak değiştirir. custom_post_type_slug /% taxonomy_slug%
Şimdi yazılan yazı tipi sayfasına yeni bir yazı türü eklediğinizde ... kalıcı bağlantıyı http://www.example.com/wordpress/themes/%themes_category%/post-name/ olarak görürsünüz
. Bu gönderi için özel taksonomi seçilmezse, kalıcı bağlantı http://www.example.com/wordpress/themes/%themes_category%/post-name/ olarak kalır ve bu kötü bir istek gösterir. Bunu düzeltmek için, özel taksonomide varsayılan bir terim oluşturuyoruz. (kategorilerde kategorize edilmemiş olanlar ile aynı)
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 );
Artık özel taksonomi boş bırakıldığında, permlaink otomatik olarak http://www.example.com/wordpress/themes/other/post-name/ olur
.
Sonunda admin bölümündeki permalink ayarındaki değişiklikleri kaydet düğmesine tıklayarak yeniden yazmayı unutma, aksi halde 404 hatasına yönlendirileceksiniz. Umarım bu size yardımcı olur.