La taxonomie par défaut de Wordpress (Catégories) a l’élément Non classé par défaut. Comment ajouter un élément par défaut à une nouvelle taxonomie personnalisée?
functions.php:
// === CUSTOM TAXONOMIES === //
function my_custom_taxonomies() {
register_taxonomy(
'block', // internal name = machine-readable taxonomy name
'static_content', // object type = post, page, link, or custom post-type
array(
'hierarchical' => true,
'labels' => array(
'name' => __( 'Blocks' ),
'singular_name' => __( 'Block' ),
'add_new_item' => 'Add New Block',
'edit_item' => 'Edit Block',
'new_item' => 'New Block',
'search_items' => 'Search Block',
'not_found' => 'No Block found',
'not_found_in_trash' => 'No Block found in trash',
),
'query_var' => true, // enable taxonomy-specific querying
'rewrite' => array( 'slug' => 'block' ), // pretty permalinks for your taxonomy?
)
);
}
add_action('init', 'my_custom_taxonomies', 0);
EDIT: Je veux juste avoir l'élément taxonomie là-bas lorsque le thème est installé. Il n'est pas nécessaire qu'il soit automatiquement ajouté à un terme vide .
Regardez ici:
En gros, vous devez utiliser le hook save_post pour vérifier les termes de la publication et ajouter le terme par défaut de votre taxonomie si elle est vide.
Si vous souhaitez simplement définir un terme initial dans votre taxonomie personnalisée, vous pouvez utiliser wp_insert_term()
. C'est probablement plus facile de l'ajouter à la même fonction que celle que vous utilisez pour créer votre taxonomie personnalisée. Comme t3ios ajoute dans les commentaires, vous devez d'abord appeler get_term()
et n'insérez le terme que si la valeur de retour est null (c'est-à-dire que le terme n'existe pas).
Cet exemple de code provient du Codex: http://codex.wordpress.org/Function_Reference/wp_insert_term
$parent_term = term_exists( 'fruits', 'product' ); // array is returned if taxonomy is given
$parent_term_id = $parent_term['term_id']; // get numeric term id
wp_insert_term(
'Apple', // the term
'product', // the taxonomy
array(
'description'=> 'A yummy Apple.',
'slug' => 'Apple',
'parent'=> $parent_term_id
)
);
La catégorie par défaut correspond à la casse codée dans wp_insert_post()
function.
Donc, il ne peut pas être répliqué exactement, mais vous pouvez le gérer autrement. J'essayais de me connecter à post status transition pour les nouvelles publications et d'assigner le terme par défaut recherché si aucune n'était assignée lors de la création d'une publication.
J'avais besoin de renseigner une taxonomie personnalisée "Jours" avec les jours de la semaine ... Je ne voulais pas que le client soit obligé de perdre son temps avec la création de jours, ni d'entrer et de supprimer des jours ou des jours de frappe erronée. À la suite de l’avis ci-dessus, j’ai trouvé cela, mais je me demande s’il existe un moyen plus concis de le coder:
/*************************************** ...Create a Custom Taxonomy for days ******************************/
add_action( 'init', 'build_taxonomies', 0 );
function build_taxonomies() {
register_taxonomy(
'days',
'schedule',
array( 'hierarchical' => true,
'label' => 'Days',
'query_var' => true,
'show_ui' => false, //removes the menus from admin menu and edit panel
'rewrite' => true ) );
/*---------------------------------------Check to see if the days are created..if not, create them----*/
$parent_term = term_exists( 'days', 'days' ); // array is returned if taxonomy is given
$parent_term_id = $parent_term['term_id']; // get numeric term id
wp_insert_term(//this should probably be an array, but I kept getting errors..
'Monday', // the term
'days', // the taxonomy
array(
'slug' => 'monday',
'parent'=> $parent_term_id ));
wp_insert_term(
'Tuesday', // the term
'days', // the taxonomy
array(
'slug' => 'tuesday',
'parent'=> $parent_term_id ));
wp_insert_term(
'Wednesday', // the term
'days', // the taxonomy
array(
'slug' => 'wednesday',
'parent'=> $parent_term_id ));
wp_insert_term(
'Thursday', // the term
'days', // the taxonomy
array(
'slug' => 'thursday',
'parent'=> $parent_term_id ));
wp_insert_term(
'Friday', // the term
'days', // the taxonomy
array(
'slug' => 'friday',
'parent'=> $parent_term_id ));
wp_insert_term(
'Saturday', // the term
'days', // the taxonomy
array(
'slug' => 'saturday',
'parent'=> $parent_term_id ));
wp_insert_term(
'Sunday', // the term
'days', // the taxonomy
array(
'slug' => 'sunday',
'parent'=> $parent_term_id ));
}
/************ now I add my own meta box for days to get rid of extra controls *************/
add_action('admin_menu', 'add_custom_categories_box');
function add_custom_categories_box() {
add_meta_box('myrelateddiv', 'Days*', 'ilc_post_related_meta_box', 'schedule', 'normal', 'low', array( 'taxonomy' => 'days' ));
}
function ilc_post_related_meta_box( $post, $box ) {
$defaults = array('taxonomy' => 'related');
if ( !isset($box['args']) || !is_array($box['args']) )
$args = array();
else
$args = $box['args'];
extract( wp_parse_args($args, $defaults), EXTR_SKIP );
$tax = get_taxonomy($taxonomy);
?>
<ul id="<?php echo $taxonomy; ?>checklist" class="list:<?php echo $taxonomy?> categorychecklist form-no-clear">
<?php
wp_terms_checklist($post->ID, array( 'taxonomy' => $taxonomy, 'popular_cats' => $popular_ids, 'checked_ontop' => FALSE ) )
?>
</ul>
En utilisant le Terme par défaut plugin, vous pouvez le faire
register_taxonomy( 'custom-tax', array('post'), array(
'label' => 'Custom Tag',
'public' => true,
'show_ui' => true,
'default_term' => 'Some Default Term', // Add this line to your code
// then activate and deactivate the default term plugin to save the terms you set.
));
Par défaut, lorsque la publication est envoyée, le terme par défaut est sauvegardé dans la publication si aucun terme n'est coché. Cela fonctionne pour les taxonomies hiérarchiques et non hiérarchiques.