Come Aggiungere i Tag a un Tipo di Post Personalizzato?
Ho un tipo di post personalizzato chiamato portfolio
e sto cercando di aggiungergli la tassonomia dei tag, come posso fare?

Oppure aggiungi semplicemente:
'taxonomies' => array('post_tag')
Un array di tassonomie registrate come
category
opost_tag
che verranno utilizzate con questo tipo di post. Può essere usato al posto di chiamare direttamenteregister_taxonomy_for_object_type()
. Le tassonomie personalizzate devono comunque essere registrate conregister_taxonomy()
.
all'array $args
nel file functions.php
dove crei il custom post type con register_post_type()
. Questo permetterà a un custom post type di utilizzare le stesse categorie e/o tag dei post predefiniti.

Come questo: (Dove dice "portfolio" è dove registri la tassonomia a un post type)
add_action( 'init', 'create_tag_taxonomies', 0 );
//crea due tassonomie, generi e tag per il post type "tag"
function create_tag_taxonomies()
{
// Aggiungi nuova tassonomia, NON gerarchica (come i tag)
$labels = array(
'name' => _x( 'Tag', 'nome generale della tassonomia' ),
'singular_name' => _x( 'Tag', 'nome singolare della tassonomia' ),
'search_items' => __( 'Cerca Tag' ),
'popular_items' => __( 'Tag Popolari' ),
'all_items' => __( 'Tutti i Tag' ),
'parent_item' => null,
'parent_item_colon' => null,
'edit_item' => __( 'Modifica Tag' ),
'update_item' => __( 'Aggiorna Tag' ),
'add_new_item' => __( 'Aggiungi Nuovo Tag' ),
'new_item_name' => __( 'Nome del Nuovo Tag' ),
'separate_items_with_commas' => __( 'Separa i tag con le virgole' ),
'add_or_remove_items' => __( 'Aggiungi o rimuovi tag' ),
'choose_from_most_used' => __( 'Scegli tra i tag più utilizzati' ),
'menu_name' => __( 'Tag' ),
);
register_taxonomy('tag','portfolio',array(
'hierarchical' => false,
'labels' => $labels,
'show_ui' => true,
'update_count_callback' => '_update_post_term_count',
'query_var' => true,
'rewrite' => array( 'slug' => 'tag' ),
));
}
?>

@JoeBobby probabilmente varrebbe la pena dare un'occhiata alla pagina del Codex di WordPress per la registrazione delle tassonomie per avere una migliore comprensione di tutte le opzioni disponibili: http://codex.wordpress.org/Function_Reference/register_taxonomy

Nota che questo sta creando una nuova tassonomia chiamata 'tag' invece di aggiungere la tassonomia esistente 'post_tag' al custom post type.

@chifliiiii come ottenere questi tag nella pagina singola del post con i link dei tag, come creare un template per la pagina dei tag

Sono d'accordo con Jake, penso che questo non risolva il problema. La risposta di @Marcus dovrebbe essere quella accettata.

come accedere al template per questa tassonomia 'tag'? Qual è il nome del template?

Metodo 1 (dalle risposte sopra: https://wordpress.stackexchange.com/a/106211/38771)
Diversi tipi di post utilizzeranno gli stessi dati dei "Tag" del tipo di post predefinito "post".
Vantaggi
Tutto (dovrebbe) funzionare immediatamente con una sola riga
Tutti i tuoi tag in un unico posto nel CMS
Svantaggi
- Dimentica un CMS ben strutturato/facile da usare - l'elenco dei Tag nella pagina dei custom post type mostrerà tutti i Tag (non solo quelli utilizzati negli articoli del custom post type) con il conteggio sbagliato...
- Le modifiche a un Tag influenzeranno sia gli articoli del tipo "post" predefinito che quelli del custom post type (Eliminare un Tag lo cancellerà in entrambi i tipi di articoli)
- Più difficile (se non impossibile) impostare qualsiasi funzionalità distinta per i Tag: descrizioni diverse, campi personalizzati, immagini, ecc. (almeno non senza molto codice personalizzato oltre al codice core di Wordpress)...
Metodo 2 (dalle risposte sopra: https://wordpress.stackexchange.com/a/62263/38771)
Diversi tipi di post utilizzano configurazioni/dati diversi per i "Tag".
Vantaggi
- Creare funzionalità diverse/chiaramente distinte relative ai tag: template frontend, capacità, filtri di query, azioni)
- Assegnare dati diversi relativi ai tag: dati dei campi o persino campi personalizzati
- Gestire meglio i Tag nel CMS
- Esempio: Modificare/Eliminare un tag del "post" non influenzerà il tag (similmente nominato/sluggato) per gli altri tipi di post
Compromesso
Un po' più di codice da configurare
In verità, sono un modo estremamente potente per raggruppare vari elementi in tutti i modi possibili. https://codex.wordpress.org/Taxonomies#Custom_Taxonomies

Ecco un caso per il Metodo 1: Un grande sito sportivo, che copre numerosi argomenti/leghe/sport con tag come "NBA", "NHL", "Basketball", "Olimpiadi", "Steroidi", "College", ecc. Non ha alcun senso duplicare e gestire quello che potrebbero essere +100 tag e 4 tipi di articoli (tipo di articolo predefinito e 3 tipi di articoli personalizzati). Per quanto riguarda gli svantaggi, se i dati del conteggio dei tag sono così speciali, allora si può creare una visualizzazione personalizzata per quello. Per quanto riguarda tag personalizzati simili per tipo di articolo, non sembra esserci alcuna necessità evidente finora (sto cercando di pensarne una... servono esempi).

Sì, ma non ci saranno automaticamente permalink diversi per i tag a seconda del tipo di articolo. Un tag "playoffs" avrà "/tag/playoffs" per tutti i tipi di articoli. Poi devi impostare regole di riscrittura o usare parametri GET per creare permalink diversi... Con una tassonomia diversa per ogni tipo di articolo, ogni tag "playoffs" per ogni tipo di articolo avrà il suo permalink, che può essere personalizzato usando la Gerarchia dei Template di Wordpress. Questo è utile se le diverse pagine "playoffs" sono diverse per NBA, NHL... Ho lavorato su un sito con quel livello di personalizzazione per le tassonomie (campi personalizzati, immagine della tassonomia, descrizione)

Capisco cosa intendi. Quindi, se si opta per tassonomie di tag diverse per CPT, che ne dici di fare in modo che quando aggiungi/modifichi un termine in una tassonomia, venga modificato anche nelle altre tassonomie, cioè termini univoci sincronizzati tra le tassonomie. Ad esempio, definisci "Basketball" una volta, diciamo nella tassonomia dei tag degli articoli, poi una volta che salvi, "Basketball" viene creato in modo univoco anche nelle altre tassonomie per i CPT. Quindi inserisci/modifichi un tag una volta e la modifica si riflette su più tassonomie di tag. Alla fine ottieni la gestione dei tag in un'unica destinazione, più una situazione di permalink più desiderabile.

Prova a utilizzare questo codice, potrebbe esserti utile
add_action( 'init', 'create_client_tax' );
function create_client_tax() {
register_taxonomy(
'client_tag', //tassonomia dei tag
'client', // Il tuo post type
array(
'hierarchical' => false,
'label' => __( 'Tag', CURRENT_THEME ),
'singular_name' => __( 'Tag', CURRENT_THEME ),
'rewrite' => true,
'query_var' => true
)
);
}

Questo funziona sempre correttamente. rif: https://developer.wordpress.org/plugins/post-types/registering-custom-post-types/
/**
* Crea tassonomia tag per il CPT portfolio
*/
if ( ! function_exists( 'ns_register_team_category' ) ) {
function ns_register_team_category() {
$labels = array(
'name' => __( 'Tag', 'ns' ),
'singular_name' => __( 'Tag', 'ns' ),
'search_items' => __( 'Cerca Tag' ),
'popular_items' => __( 'Tag Popolari' ),
'all_items' => __( 'Tutti i Tag' ),
'parent_item' => null,
'parent_item_colon' => null,
'edit_item' => __( 'Modifica Tag' ),
'update_item' => __( 'Aggiorna Tag' ),
'add_new_item' => __( 'Aggiungi Nuovo Tag' ),
'new_item_name' => __( 'Nome Nuovo Tag' ),
'separate_items_with_commas' => __( 'Separa i tag con virgole' ),
'add_or_remove_items' => __( 'Aggiungi o rimuovi tag' ),
'choose_from_most_used' => __( 'Scegli tra i tag più utilizzati' ),
'menu_name' => __( 'Tag' ),
);
$args = array(
'label' => __( 'Tag', 'ns' ),
'labels' => $labels,
'public' => true,
'publicly_queryable' => true,
'hierarchical' => true,
'show_ui' => true,
'show_in_menu' => true,
'show_in_nav_menus' => true,
'query_var' => true,
'rewrite' => array( 'slug' => 'tag', 'with_front' => false, ),
'show_admin_column' => false,
'show_in_rest' => true,
'rest_base' => 'tag',
'rest_controller_class' => 'WP_REST_Terms_Controller',
'show_in_quick_edit' => true,
'update_count_callback' => '_update_post_term_count',
);
register_taxonomy( 'tag', array( 'portfolio' ), $args );
}
add_action( 'init', 'ns_register_team_category', 0 );
}

Puoi semplicemente aggiungere una tassonomia già registrata a un tipo di oggetto, vedi il codice qui sotto.
/**
* Funzione per aggiungere la selezione di Tag al Custom Post Type
*/
function ns_reg_tag() {
register_taxonomy_for_object_type('post_tag', 'Custom_Post_Type');
}
add_action('init', 'ns_reg_tag');

Sebbene la risposta di Marcus risolva la maggior parte del problema, tieni presente che non è una soluzione completa. La risposta di chifliiiii è più completa ma, come menzionato nei commenti, non riutilizza la tassonomia dei tag già esistente.
Secondo l'OP, una soluzione deve utilizzare "la tassonomia dei tag" e non "una tassonomia dei tag". Ecco perché ritengo che la risposta di chifliiiii sia errata.
D'altra parte, penso che la risposta di Marcus sia parzialmente corretta, lo stesso vale per risposte simili come quella pubblicata da Giovanni Putignano. Spiegherò di seguito il perché.
Una soluzione completa
Registrando il tuo custom post type alla tassonomia post_tag
, utilizzando il metodo suggerito da Marcus o Giovanni, non verranno visualizzati i post taggati del tuo custom post type nella pagina archivio dei tag. Verranno visualizzati solo i post del post type post
, perché il template predefinito dei tag viene generato con una query che punta solo al post type post
. Per risolvere questo problema, devi modificare la query con l'hook pre_get_posts
.
Questo è un modo generico per risolvere il problema (non chiedermi perché questo non sia implementato nel core):
add_action('pre_get_posts', function($query) {
// Questo targetterà le query utilizzate per generare il template dell'archivio dei tag.
// Puoi rimuovere la condizione `is_main_query()` se vuoi ottenere i post
// per tag al di fuori del loop.
if (!is_admin() && is_tag() && $query->is_main_query()) {
// Imposterà qualcosa come: Array( 'post', 'portfolio' )
$types = get_taxonomy('post_tag')->object_type;
// Modifica la query per utilizzare solo i tipi registrati alla
// tassonomia `post_tag`.
$query->set('post_type', $types);
}
});

Nel mio caso il seguente codice ha funzionato.
register_taxonomy( 'events_tag',array('events'), array(
'hierarchical' => false,
'label' => 'Tag',
'show_admin_column' => true,
'singular_label' => 'Tag del tuo tipo di articolo',
'query_var' => true,
'rewrite' => array( 'slug' => 'events_tag' ),
'show_in_rest' => true,
'rest_base' => 'events_tag',
'rest_controller_class' => 'WP_REST_Terms_Controller',
)
);
