A fait cette taxonomie personnalisée qui contrôlera la mise en page sur des messages uniques, je veux essentiellement ajouter deux options, la mise en page 1 et la mise en page 2.
// Register Custom Taxonomy
function custom_taxonomy() {
$labels = array(
'name' => _x( 'Layout', 'Taxonomy General Name', 'text_domain' ),
'singular_name' => _x( 'Layout', 'Taxonomy Singular Name', 'text_domain' ),
'menu_name' => __( 'Taxonomy', 'text_domain' ),
'all_items' => __( 'All Items', 'text_domain' ),
'parent_item' => __( 'Parent Item', 'text_domain' ),
'parent_item_colon' => __( 'Parent Item:', 'text_domain' ),
'new_item_name' => __( 'New Item Name', 'text_domain' ),
'add_new_item' => __( 'Add New Item', 'text_domain' ),
'edit_item' => __( 'Edit Item', 'text_domain' ),
'update_item' => __( 'Update Item', 'text_domain' ),
'separate_items_with_commas' => __( 'Separate items with commas', 'text_domain' ),
'search_items' => __( 'Search Items', 'text_domain' ),
'add_or_remove_items' => __( 'Add or remove items', 'text_domain' ),
'choose_from_most_used' => __( 'Choose from the most used items', 'text_domain' ),
'not_found' => __( 'Not Found', 'text_domain' ),
);
$capabilities = array(
'manage_terms' => 'foobar',
'edit_terms' => 'foobar',
'delete_terms' => 'foobar',
'assign_terms' => 'foobar'
);
$args = array(
'labels' => $labels,
'hierarchical' => true,
'public' => true,
'show_ui' => true,
'show_admin_column' => false,
'show_in_nav_menus' => false,
'show_tagcloud' => false,
'capabilities' => $capabilities,
);
register_taxonomy( 'Layout', array( 'post' ), $args );
}
// Hook into the 'init' action
add_action( 'init', 'custom_taxonomy', 0 );
Les capacités sont définies sur des valeurs non valides pour empêcher la modification des termes, mais je ne parviens pas à faire fonctionner wp_insert_term.
Ajouter deux termes à ma taxonomie personnalisée ne peut pas être si difficile, non?
Utiliser ceci pour insérer un terme ne fonctionne pas, bien que si j'ai changé mon nom de taxonomie personnalisé en «catégorie», c'est-à-dire WP par défaut, cela fonctionne très bien. Ce qui donne?
function example_insert_category() {
$parent_term = term_exists( 'layout' ); // array is returned if taxonomy is given
$parent_term_id = $parent_term['term_id']; // get numeric term id
wp_insert_term(
'Example Category',
'layout',
array(
'description' => 'This is an example category created with wp_insert_term.',
'slug' => 'example-category'
)
);
}
add_action( 'after_setup_theme', 'example_insert_category' );
custom-taxonomy
Andy
la source
la source
Réponses:
EDIT 2
Comme promis, voici le code du plugin.
C'est un fait connu que les taxonomies personnalisées et les types de publication personnalisés doivent aller dans un plugin, et non dans votre thème. J'ai supprimé des parties de mon plugin.
COMMENT ÇA FONCTIONNE
La taxonomie est enregistrée comme normale via le plugin. Pour toute information à ce sujet, vous pouvez aller vérifier
register_taxonomy
. La partie que je devais souligner et ce qui est pertinent pour cette question, c'est comment insérer de nouveaux termes.Insérer des termes
wp_insert_terms
est rapide et facile, mais ce code peut également réduire le temps de chargement s'il n'est pas utilisé correctement. L'idée est d'exécuter cette fonction une fois, puis plus jamais, presque comme la supprimer après la première exécution.Pour ce faire, vous allez accrocher votre fonction
register_activation_hook
. Ce hook s'exécute une fois, c'est-à-dire lorsque le plugin est activé, il ne sera pas réexécuté lors de l'actualisation de la page. La seule fois où il se déclenchera à nouveau, c'est lorsque le plugin sera désactivé et réactivéVous devez donc d'abord enregistrer votre taxonomie car vous ne pouvez pas attribuer de termes à une taxonomie qui n'existe pas. Une fois votre taxonomie enregistrée, vous pouvez insérer vos termes. N'oubliez pas que cette action n'aura lieu qu'une seule fois, et c'est à ce moment que le plugin est activé. Si vous devez ajouter des termes, vous devez désactiver le plugin et le réactiver
Vous voulez également d'abord vérifier si un terme existe avant d'essayer de le créer et de l'insérer.
Voici le code du plugin
EDIT 1
Votre problème avec l'insertion de termes est votre crochet.
after_setup_theme
s'exécute avantinit
, ce qui signifie que vous essayez d'insérer un terme dans une taxonomie qui n'est pas encore enregistrée.Je suggère que vous déplaciez votre
wp_insert_term
fonction à l'intérieur de votre fonction init, juste en dessousregister_taxonomy
Il est également conseillé de vérifier d'abord si un terme existe (
term_exists
) avant de l'insérerExemple:
Veuillez noter que ceci n'est pas testé
RÉPONSE ORIGINALE
Les noms de taxonomie personnalisés (et les noms de type de publication personnalisés) doivent se conformer à un ensemble de règles très spécifique, sinon vous rencontrerez des pièges pour lesquels il n'y a pas de solution.
Voici une ligne directrice lors du choix des noms pour les taxonomies personnalisées (et les types de publication personnalisés)
Les éléments suivants ne sont pas autorisés dans les noms de taxonomie personnalisés et les noms de type de publication personnalisés
Lettres majuscules ou chameau
Tout type de caractère spécial, sauf les traits de soulignement (
_
)Les espaces
Plus de 32 caractères pour les taxonomies et 20 pour les types de publication
Tous les noms réservés , et veuillez noter que cela vaut pour toute convention de dénomination personnalisée, pas seulement les noms de taxonomie.
S'il y a plus d'un mot dans un nom de taxonomie, ils doivent être séparés par des traits de soulignement et non par des tirets (
-
). J'ai été mis au défi que les tirets soient la voie à suivre pour le référencement dans les URL des noms de taxonomie. C'est vrai, c'est pourquoi il existe des règles de réécriture pour ajuster votre URL en conséquence. Ne modifiez jamais les noms de taxonomie ou les noms de type de publication à des fins de référencement d'URLEn outre, vous devez supprimer ces capacités étranges. Cela pourrait également créer un problème
Si cela ne résout pas votre problème, veuillez ajouter le code que vous utilisez avec
wp_insert_term
Référence:
register_taxonomy
register_post_type
la source
$taxonomy
paramètre n'est pas purifié du tout, si l'query_var
argument est défini surtrue
. C'est assez incroyable en fait. Et sinon, il est nettoyé viasanitize_title_with_dashes()
, ce qui, nomen es omen, remplacera les trucs par des tirets partout. Ce qui est incroyable aussi, car ils ne devraient pas être utilisés.register_post_type()
.