Come aggiungere un elemento predefinito a una tassonomia personalizzata?

18 gen 2011, 13:14:41
Visualizzazioni: 27.6K
Voti: 12

La tassonomia predefinita di WordPress (Categorie) ha l'elemento "Senza categoria" come predefinito. Come aggiungere un elemento predefinito a una nuova tassonomia personalizzata?

functions.php:

// === TASSONOMIE PERSONALIZZATE === //
function my_custom_taxonomies() {
    register_taxonomy(
        'block',        // nome interno = nome tassonomia leggibile dalla macchina
        'static_content',       // tipo di oggetto = post, page, link, o custom post-type
        array(
            'hierarchical' => true,
            'labels' => array(
                'name' => __( 'Blocchi' ),
                'singular_name' => __( 'Blocco' ),
                'add_new_item' => 'Aggiungi Nuovo Blocco',
                'edit_item' => 'Modifica Blocco',
                'new_item' => 'Nuovo Blocco',
                'search_items' => 'Cerca Blocco',
                'not_found' => 'Nessun Blocco trovato',
                'not_found_in_trash' => 'Nessun Blocco trovato nel cestino',
            ),
            'query_var' => true,    // abilita query specifiche per la tassonomia
            'rewrite' => array( 'slug' => 'block' ),    // permalink descrittivi per la tua tassonomia?
        )
    );
}
add_action('init', 'my_custom_taxonomies', 0);

MODIFICA: Voglio solo che l'elemento della tassonomia sia presente quando il tema viene installato. Non deve essere automaticamente aggiunto a nessun termine vuoto.

0
Tutte le risposte alla domanda 5
2
14

Aggiornamento al 2020

Versione Descrizione
5.5.0 Introdotto l'argomento default_term.

A partire dalla versione 5.5.0 di Wordpress, è possibile specificare un termine predefinito quando si registra una nuova tassonomia personalizzata utilizzando il comodo argomento default_term.

$args = [
    /...
    'default_term' => [ //(string|array) Termine predefinito da utilizzare per la tassonomia.
        'name' => 'Patata', //(string) Nome del termine predefinito.
        'slug' => 'patata', //(string) Slug per il termine predefinito.
        'description' => 'Puoi passare la notte dentro una patata, https://www.youtube.com/watch?v=h2mj-7-Zklw', //(string) Descrizione del termine predefinito.
    ],
    /...
];
7 mar 2021 20:52:49
Commenti

Qualche idea su come aggiungere più termini predefiniti?

Loosie94 Loosie94
18 ott 2022 22:12:28

Accetta un array, quindi... array( array( 'name' => 'Potato', 'slug' => 'potato', 'description' => '', ), array( 'name' => 'Chicken', 'slug' => 'chicken', 'description' => '', ), ) ...

amarinediary amarinediary
18 ott 2022 22:20:39
7

Dai un'occhiata qui:

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

In sostanza, quello che devi fare è utilizzare l'hook save_post per verificare i termini del post e aggiungere il termine predefinito dalla tua tassonomia se è vuoto.

Se vuoi semplicemente impostare un termine iniziale nella tua tassonomia personalizzata, puoi usare wp_insert_term(). Probabilmente è più semplice aggiungerlo nella stessa funzione che stai utilizzando per creare la tua tassonomia personalizzata. Come aggiunge t3ios nei commenti, dovresti prima chiamare get_term() e inserire il termine solo se il valore restituito è null (cioè il termine non esiste).

Questo codice di esempio è tratto dal Codex: http://codex.wordpress.org/Function_Reference/wp_insert_term

$parent_term = term_exists( 'fruits', 'product' ); // viene restituito un array se viene fornita la tassonomia
$parent_term_id = $parent_term['term_id']; // ottieni l'ID numerico del termine
wp_insert_term(
  'Apple', // il termine 
  'product', // la tassonomia
  array(
    'description'=> 'Una mela deliziosa.', 
    'slug' => 'apple', 
    'parent'=> $parent_term_id
  )
);
18 gen 2011 13:46:07
Commenti

@anu Penso di non essermi spiegato molto bene, volevo semplicemente che quella tassonomia fosse presente quando il tema viene installato. Non deve necessariamente avere alcun termine se è vuota.

wyc wyc
18 gen 2011 14:00:53

@janoChen - Ho aggiornato la risposta

anu anu
18 gen 2011 14:09:47

@anu Eccellente, vorrei poter votare la tua risposta più volte. Ho modificato le domande. Dove esattamente dovrei inserire quel codice che hai scritto sopra?

wyc wyc
18 gen 2011 14:13:19

Il codice che ho aggiunto è solo un esempio (ed è tratto dal codex di WordPress) - dovrai modificarlo secondo necessità. Il posto migliore per inserirlo sarebbe appena prima della parentesi graffa di chiusura della funzione.

anu anu
18 gen 2011 14:15:29

E se funziona, accetta semplicemente la risposta selezionandola! È meglio che voti aggiuntivi ;)

anu anu
18 gen 2011 14:16:54

Sei sicuro di voler eseguire l'inserimento in quella funzione? Viene eseguito su init, cioè su ogni pagina, non credo tu voglia eseguire l'inserimento ogni volta che una pagina viene chiamata, vero? Forse la funzione di inserimento restituisce null/false se esiste già un termine con lo stesso nome (non ho verificato), ma comunque sembra un po' inutile (perché non chiamare get_term(s) per verificare se esiste e poi inserire solo se non presente).

t31os t31os
18 gen 2011 18:30:29

yup - sono completamente d'accordo che dovresti verificare l'esistenza del termine prima di fare un inserimento - quello era solo del codice di esempio preso dal Codex. Aggiornerò la risposta

anu anu
18 gen 2011 19:56:20
Mostra i restanti 2 commenti
1

La categoria predefinita è un caso hardcoded nella funzione wp_insert_post().

Quindi non può essere replicata esattamente, ma puoi gestirla in altri modi. Proverei ad agganciarmi alla transizione dello stato del post per i nuovi articoli e assegnare il termine predefinito desiderato se nessuno è stato assegnato durante la creazione del post.

18 gen 2011 13:41:28
Commenti

+1 per il link all'hook dello stato del post, era esattamente quello che stavo cercando.

Matt Matt
25 feb 2016 15:28:23
0

Dovevo popolare una Tassonomia Personalizzata "Giorni" con i giorni della settimana. Non volevo che il cliente dovesse preoccuparsi di creare i giorni, o cancellarli o sbagliarne l'ortografia. Seguendo i consigli sopra ho creato questo codice, ma mi chiedo se esista un modo più conciso per scriverlo:

/*************************************** ...Crea una Tassonomia Personalizzata per i giorni ******************************/
add_action( 'init', 'build_taxonomies', 0 );  
function build_taxonomies() {  
    register_taxonomy( 
    'days', 
    'schedule',
   array( 'hierarchical' => true, 
    'label' => 'Giorni',
    'query_var' => true, 
    'show_ui' => false, //rimuove i menu dal pannello admin e dall'editor  
    'rewrite' => true ) );  

/*---------------------------------------Controlla se i giorni sono già creati.. altrimenti, creali----*/
$parent_term = term_exists( 'days', 'days' ); // restituisce un array se la tassonomia esiste
$parent_term_id = $parent_term['term_id']; // ottieni l'ID numerico del termine

wp_insert_term(//probabilmente dovrebbe essere un array, ma continuavo a ricevere errori..
        'Lunedì', // il termine 
        'days', // la tassonomia
        array(
        'slug' => 'lunedi',
        'parent'=> $parent_term_id ));

wp_insert_term(
        'Martedì', // il termine 
        'days', // la tassonomia
        array(
        'slug' => 'martedi',
        'parent'=> $parent_term_id ));

wp_insert_term(
        'Mercoledì', // il termine 
        'days', // la tassonomia
        array(
        'slug' => 'mercoledi',
        'parent'=> $parent_term_id ));

wp_insert_term(
        'Giovedì', // il termine 
        'days', // la tassonomia
        array(
        'slug' => 'giovedi',
        'parent'=> $parent_term_id ));

wp_insert_term(
        'Venerdì', // il termine 
        'days', // la tassonomia
        array(
        'slug' => 'venerdi',
        'parent'=> $parent_term_id ));

wp_insert_term(
        'Sabato', // il termine 
        'days', // la tassonomia
        array(
        'slug' => 'sabato',
        'parent'=> $parent_term_id ));

wp_insert_term(
        'Domenica', // il termine 
        'days', // la tassonomia
        array(
        'slug' => 'domenica',
        'parent'=> $parent_term_id ));
}
/************ ora aggiungo la mia meta box personalizzata per i giorni per eliminare controlli extra *************/

add_action('admin_menu', 'add_custom_categories_box');
function add_custom_categories_box() {
 add_meta_box('myrelateddiv', 'Giorni*', '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>   
11 ott 2011 20:57:07
1

Utilizzando il plugin Default Term puoi fare questo

register_taxonomy( 'custom-tax', array('post'), array(
    'label'              => 'Custom Tag',
    'public'             => true,
    'show_ui'            => true,
    'default_term'       => 'Some Default Term', // Aggiungi questa riga al tuo codice
// poi attiva e disattiva il plugin default term per salvare i termini che hai impostato.
));

Di default quando il post viene inviato salverà il termine predefinito al post se non è stato selezionato alcun termine. Funziona sia per tassonomie gerarchiche che non gerarchiche.

7 ago 2016 07:38:37
Commenti

Sarebbe bello se selezionasse automaticamente il termine specificato nella vista di creazione del post, così l'utente è consapevole di cosa accadrà.

Garconis Garconis
12 set 2017 20:11:04