우선 분류 메타 박스를 사용자 정의 게시물 유형에만 표시하려면 사용자 정의 게시물 유형 이름을 register_taxonomy의 인수로 전달하여 분류를 해당 사용자 정의 게시물 유형에만 등록하십시오. 이렇게하면 분류 메타 박스가 맞춤 게시물 유형에만 나타납니다. 사용자 정의 게시물 유형에 카테고리 메타 박스를 표시하지 않으려면 사용자 정의 게시물 유형을 등록하는 동안 용어 카테고리를 인수로 제거하고 대신 'taxonomies'=> array ( 'post_tag', 'your_taxonomy_name')와 같은 분류법 슬러그 이름을 포함하십시오. . 여기 내가 그것을 달성 한 코드가 있습니다. 사용자 정의 게시물 유형 테마 아래에서 슬러그 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');
그런 다음 영구 링크를 변경하려면 다음 기능을 만들었습니다.
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 );
이제 맞춤 분류 체계를 비워두면 Permlaink가
http://www.example.com/wordpress/themes/other/post-name/이 자동으로됩니다.
마지막으로 관리자 섹션에서 permalink 설정에서 변경 사항 저장을 클릭하여 다시 쓰기를 플러시하는 것을 잊지 마십시오. 그렇지 않으면 404 오류로 리디렉션됩니다. 이것이 도움이되기를 바랍니다.