web-dev-qa-db-fra.com

Comment ajouter un élément par défaut à une taxonomie personnalisée?

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 .

9
janoChen

Regardez ici:

https://web.archive.org/web/20150403012347/http://wordpress.mfields.org/2010/set-default-terms-for-your-cour-taxonomies-in-wordpress-3-0/

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
  )
);
7
anu

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.

4
Rarst

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>   
0
endle.winters

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.

0