WordPress自定义分类法显示默认分类问题求助
我在WordPress里创建了名为「Associations」的自定义文章类型(CPT),还配套做了专属的自定义分类法「les_associations」(分类项是Enfance、Sport、Informatique这些),但进入CPT的编辑页面时,右侧显示的却是默认的分类(Actualités、Agenda这些),完全看不到我自己做的分类法。相关代码如下:
/** * Permet de créer un type de posts personnalisé, avec un menu dédié * concernant les associations, leur ajout, édition, suppression, etc... */ function wp_custom_post_type() { $labels = array( 'name' => _x( 'Associations', 'Post Type General Name'), 'singular_name' => _x( 'Association', 'Post Type Singular Name'), 'menu_name' => __( 'Associations'), 'all_items' => __( 'Toutes les associations'), 'view_item' => __( 'Voir l\'association'), 'add_new_item' => __( 'Ajouter une nouvelle association'), 'add_new' => __( 'Ajouter'), 'edit_item' => __( 'Editer l\'association'), 'update_item' => __( 'Modifier l\'association'), 'search_items' => __( 'Rechercher une association'), 'not_found' => __( 'Non trouvée'), 'not_found_in_trash' => __( 'Non trouvée dans la corbeille'), ); $args = array( 'label' => __( 'Associations'), 'description' => __( 'Annuaire des associations des Coteaux Bordelais.'), 'labels' => $labels, 'supports' => array( 'title', 'thumbnail'), 'menu_icon' => 'dashicons-admin-home', 'hierarchical' => false, 'public' => true, 'has_archive' => false, 'rewrite' => array( 'slug' => 'associations'), ); register_post_type( 'associations', $args ); } /** * Crée des catégories spécifiques pour les associations * afin de ne pas les mélanger avec les catégories normales. */ function wp_add_taxonomies() { $labels_asso_taxonomy = array( 'name' => _x('Catégories d\'association', 'taxonomy general name'), 'singular_name' => _x('Catégorie d\'association', 'taxonomy singular name'), 'search_items' => __('Rechercher une catégorie'), 'popular_items' => __('Catégories populaires'), 'all_items' => __('Toutes'), 'edit_item' => __('Éditer une catégorie'), 'update_item' => __('Mettre à jour une catégorie'), 'add_new_item' => __('Ajouter une nouvelle catégorie'), 'new_item_name' => __('Nom de la nouvelle catégorie'), 'add_or_remove_items ' => __('Ajouter ou supprimer une catégorie'), 'choose_from_most_used' => __('Choisir parmi les catégories les plus utilisées'), 'not_found' => __('Aucune catégorie d\'association trouvée'), 'menu_name' => __('Catégories d\'association'), ); $args_cat_association = array( 'hierarchical' => true, 'labels' => $labels_asso_taxonomy, 'show_ui' => true, 'show_admin_column' => true, 'query_var' => true, 'rewrite' => array( 'slug' => 'les-associations', 'with_front' => true ) ); register_taxonomy('les_associations', 'associations', $args_cat_association); register_taxonomy_for_object_type('les_associations', 'associations'); }
问题出在哪?
我帮你梳理了三个关键问题:
自定义文章类型未绑定自定义分类法
在注册CPT的$args数组里,你没指定taxonomies参数,WordPress不知道这个CPT要关联你创建的les_associations分类法,反而默认保留了和默认分类(category)的绑定,所以编辑页显示的是默认分类。自定义分类法标签存在语法错误
你在$labels_asso_taxonomy里写了'add_or_remove_items '(注意末尾多了个空格),这个会导致WordPress无法正确识别这个标签,可能影响分类法的显示逻辑。存在冗余代码
register_taxonomy_for_object_type('les_associations', 'associations');这行代码是多余的——因为register_taxonomy的第二个参数已经指定了关联的CPT是associations,重复调用反而没必要。
修正后的代码
1. 修正自定义文章类型注册函数
在$args里添加taxonomies参数绑定自定义分类法,同时移除默认分类和该CPT的绑定:
function wp_custom_post_type() { $labels = array( 'name' => _x( 'Associations', 'Post Type General Name'), 'singular_name' => _x( 'Association', 'Post Type Singular Name'), 'menu_name' => __( 'Associations'), 'all_items' => __( 'Toutes les associations'), 'view_item' => __( 'Voir l\'association'), 'add_new_item' => __( 'Ajouter une nouvelle association'), 'add_new' => __( 'Ajouter'), 'edit_item' => __( 'Editer l\'association'), 'update_item' => __( 'Modifier l\'association'), 'search_items' => __( 'Rechercher une association'), 'not_found' => __( 'Non trouvée'), 'not_found_in_trash' => __( 'Non trouvée dans la corbeille'), ); $args = array( 'label' => __( 'Associations'), 'description' => __( 'Annuaire des associations des Coteaux Bordelais.'), 'labels' => $labels, 'supports' => array( 'title', 'thumbnail'), 'menu_icon' => 'dashicons-admin-home', 'hierarchical' => false, 'public' => true, 'has_archive' => false, 'rewrite' => array( 'slug' => 'associations'), // 添加这行,绑定自定义分类法 'taxonomies' => array('les_associations'), ); register_post_type( 'associations', $args ); // 移除默认分类法和这个CPT的绑定 unregister_taxonomy_for_object_type('category', 'associations'); }
2. 修正自定义分类法注册函数
去掉冗余代码和标签里的空格:
function wp_add_taxonomies() { $labels_asso_taxonomy = array( 'name' => _x('Catégories d\'association', 'taxonomy general name'), 'singular_name' => _x('Catégorie d\'association', 'taxonomy singular name'), 'search_items' => __('Rechercher une catégorie'), 'popular_items' => __('Catégories populaires'), 'all_items' => __('Toutes'), 'edit_item' => __('Éditer une catégorie'), 'update_item' => __('Mettre à jour une catégorie'), 'add_new_item' => __('Ajouter une nouvelle catégorie'), 'new_item_name' => __('Nom de la nouvelle catégorie'), // 去掉末尾的空格 'add_or_remove_items' => __('Ajouter ou supprimer une catégorie'), 'choose_from_most_used' => __('Choisir parmi les catégories les plus utilisées'), 'not_found' => __('Aucune catégorie d\'association trouvée'), 'menu_name' => __('Catégories d\'association'), ); $args_cat_association = array( 'hierarchical' => true, 'labels' => $labels_asso_taxonomy, 'show_ui' => true, 'show_admin_column' => true, 'query_var' => true, 'rewrite' => array( 'slug' => 'les-associations', 'with_front' => true ) ); register_taxonomy('les_associations', 'associations', $args_cat_association); // 删掉冗余代码 // register_taxonomy_for_object_type('les_associations', 'associations'); }
最后一步
修改完代码后,记得刷新WordPress后台,或者重新保存一次固定链接设置(设置→固定链接→保存更改),确保所有设置生效。这样再进入Associations的编辑页面,就能看到你自定义的分类法盒子,默认分类会消失啦。
内容的提问来源于stack exchange,提问作者necronhdx

