Cum să adaugi etichete (tags) la un tip de postare personalizat?

19 aug. 2012, 01:24:44
Vizualizări: 124K
Voturi: 46

Am un tip de postare personalizat numit portfolio și încerc să adaug taxonomia de etichete la acesta, cum pot face acest lucru?

2
Comentarii

@chifliiiii dacă fac asta, Categoriile și Etichetele sunt aceleași ca cele folosite pentru Articole. Cum pot obține Categorii și Etichete care sunt exclusive pentru noul tip de postare?

Troy Templeman Troy Templeman
8 mai 2014 19:36:36

@chifliiiii Cum afișez etichetele în șablon?

Max Max
22 mar. 2017 01:54:13
Toate răspunsurile la întrebare 9
1
102

Sau pur și simplu adaugă:

'taxonomies' => array('post_tag')

Un array de taxonomii înregistrate precum category sau post_tag care vor fi utilizate cu acest tip de postare. Aceasta poate fi folosită în locul apelării directe a funcției register_taxonomy_for_object_type(). Taxonomiile personalizate încă trebuie să fie înregistrate cu register_taxonomy().

în array-ul $args din fișierul functions.php unde creezi tipul de postare personalizat cu register_post_type(). Aceasta va adăuga un tip de postare personalizat pentru a folosi aceleași categorii și/sau etichete ca postările implicite.

12 iul. 2013 06:06:43
Comentarii

Te rog să adaugi o explicație la răspunsul tău: de ce ar putea rezolva problema?

fuxia fuxia
12 iul. 2013 06:54:48
7
27

Ca acesta: (Unde scrie "portfolio" este locul unde înregistrați taxonomia pentru un tip de postare)

add_action( 'init', 'create_tag_taxonomies', 0 );

//crează două taxonomii, genuri și etichete pentru tipul de postare "tag"
function create_tag_taxonomies() 
{
  // Adaugă o nouă taxonomie, NU ierarhică (ca etichetele)
  $labels = array(
    'name' => _x( 'Etichete', 'taxonomy general name' ),
    'singular_name' => _x( 'Etichetă', 'taxonomy singular name' ),
    'search_items' =>  __( 'Caută Etichete' ),
    'popular_items' => __( 'Etichete Populare' ),
    'all_items' => __( 'Toate Etichetele' ),
    'parent_item' => null,
    'parent_item_colon' => null,
    'edit_item' => __( 'Editează Eticheta' ), 
    'update_item' => __( 'Actualizează Eticheta' ),
    'add_new_item' => __( 'Adaugă Etichetă Nouă' ),
    'new_item_name' => __( 'Nume Etichetă Nouă' ),
    'separate_items_with_commas' => __( 'Separați etichetele cu virgule' ),
    'add_or_remove_items' => __( 'Adaugă sau elimină etichete' ),
    'choose_from_most_used' => __( 'Alege dintre cele mai folosite etichete' ),
    'menu_name' => __( 'Etichete' ),
  ); 

  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' ),
  ));
}
?>
19 aug. 2012 02:07:03
Comentarii

@JoeBobby ar fi probabil util să consulți pagina WordPress Codex pentru înregistrarea taxonomiilor pentru a înțelege mai bine toate opțiunile disponibile: http://codex.wordpress.org/Function_Reference/register_taxonomy

Stephen S. Stephen S.
8 mai 2014 19:41:54

Doar o observație că acest lucru creează o taxonomie complet nouă numită 'tag' în loc să adauge taxonomia existentă 'post_tag' la tipul de postare personalizat.

Jake Jake
28 iun. 2017 20:53:05

@chifliiiii cum să obții aceste etichete în pagina single a postării cu linkuri către etichete, cum să creezi un șablon pentru pagina de etichete

Dinesh Dinesh
25 iun. 2018 12:05:06

Sunt de acord cu Jake, simt că aceasta nu rezolvă problema. Răspunsul lui @Marcus ar trebui să fie cel marcat ca acceptat.

Craig Wayne Craig Wayne
13 iul. 2018 00:20:09

cum pot accesa template-ul pentru această taxonomie 'tag'? Care este numele template-ului?

emir emir
8 iun. 2021 11:04:17

Încă îmi lipsește caseta de tag-uri pe ecranul de editare al CPT

Fanky Fanky
29 iul. 2021 14:10:43

Caseta de tag-uri din ecranul de editare din administrație a apărut prin adăugarea 'show_in_rest' => true, în parametrii register_taxonomy()! 8-o

Fanky Fanky
29 iul. 2021 14:37:49
Arată celelalte 2 comentarii
0
10

Folosește acest cod:

add_action( 'init', 'gp_register_taxonomy_for_object_type' );
function gp_register_taxonomy_for_object_type() {
    register_taxonomy_for_object_type( 'post_tag', 'portfolio' );
};
8 oct. 2014 13:16:29
4

Metoda 1 (din răspunsurile de mai sus: https://wordpress.stackexchange.com/a/106211/38771)

Diferite tipuri de postări vor folosi aceleași date "Tag-uri" ca tipul implicit "post".

  • Beneficii

    • Totul (ar trebui să) funcționeze imediat cu o singură linie de cod

    • Toate tag-urile într-un singur loc în CMS

  • Dezavantaje

    • Uită de un CMS bine structurat / ușor de utilizat - lista de Tag-uri pe pagina tipurilor de postări personalizate va afișa toate Tag-urile (nu doar cele utilizate în articolele tipului personalizat) cu numărarea greșită...
    • Modificările la un Tag vor afecta atât articolele implicite "post", cât și cele ale tipului personalizat (Ștergerea unui Tag îl va șterge în ambele tipuri de articole)
    • Mai greu (posibil imposibil) de configurat orice funcționalitate distinctă pentru Tag-uri: descrieri diferite, câmpuri personalizate, imagini, etc (cel puțin nu fără mult cod personalizat peste codul de bază Wordpress)...

Metoda 2 (din răspunsurile de mai sus: https://wordpress.stackexchange.com/a/62263/38771)

Diferite tipuri de postări folosesc configurații/date diferite pentru "Tag-uri".

  • Beneficii

    • Creare de funcționalități diferite/clar distincte legate de tag-uri: șabloane frontend, capabilități, filtre de interogare, acțiuni)
    • Atribuire de date diferite legate de tag-uri: date de câmpuri sau chiar câmpuri personalizate
    • Gestionare mai bună a Tag-urilor în CMS
      • Exemplu: Editarea/Ștergerea unui tag "post" nu va afecta tag-ul (cu nume/slug similar) pentru celelalte tipuri de postări
  • Compromis

    Un pic mai mult cod pentru configurare

În realitate, acestea sunt un mod extrem de puternic de a grupa diverse elemente în tot felul de moduri. https://codex.wordpress.org/Taxonomies#Custom_Taxonomies

9 oct. 2018 20:07:10
Comentarii

Iată un caz pentru Metoda 1: Un site sportiv mare, care acoperă numeroase subiecte/liga/sporturi cu etichete precum "NBA", "NHL", "Baschet", "Olimpiade", "Steroizi", "Universitate", etc. Nu are niciun sens să duplicăm și să gestionăm ceea ce ar putea fi peste 100 de etichete și 4 tipuri de articole (tipul implicit de articol și 3 tipuri personalizate de articole). În ceea ce privește dezavantajele, dacă datele despre numărul de etichete sunt atât de speciale, atunci se poate crea o vizualizare personalizată pentru asta. În ceea ce privește etichetele personalizate similare pe tip de articol, nu pare să existe vreo nevoie evidentă până acum (încercând să mă gândesc la una... am nevoie de exemple).

Kalnode Kalnode
12 ian. 2019 02:23:24

Da, dar nu vor exista automat permalinkuri diferite pentru etichete în funcție de tipul de articol. O etichetă "playoffs" va avea "/tag/playoffs" pentru toate tipurile de articole. Apoi, trebuie să configurezi reguli de rescriere sau să folosești parametri GET pentru a crea permalinkuri diferite... Cu o taxonomie diferită pentru fiecare tip de articol, fiecare etichetă "playoffs" pentru fiecare tip de articol va avea propriul permalink, care poate fi personalizat folosind Ierarhia de Șabloane WordPress. Este benefic dacă paginile "playoffs" sunt diferite pentru NBA, NHL... Am lucrat la un site cu acest nivel de personalizare pentru taxonomii (câmpuri personalizate, imagine pentru taxonomie, descriere)

P-S P-S
14 ian. 2019 15:53:08

Înțeleg ce spui. Deci, dacă alegem să avem taxonomii de etichete diferite pentru fiecare CPT, ce zici să facem astfel încât atunci când adaugi/editezi un termen într-o taxonomie, acesta să se modifice și în celelalte taxonomii, adică să avem termeni unici sincronizați între taxonomii. De exemplu, definești "Baschet" o singură dată, să zicem în taxonomia de etichete a articolelor, iar după ce apeși salvează, atunci "Baschet" este creat în mod unic și în celelalte taxonomii pentru CPT-uri. Astfel, introduci/editezi o etichetă o singură dată, iar modificarea se reflectă în mai multe taxonomii de etichete. În final, obții gestionarea etichetelor într-un singur loc, plus o situație de permalinkuri mai dorită.

Kalnode Kalnode
15 ian. 2019 03:15:46

Da, asta ar fi de fapt o metodă excelentă dacă site-ul folosește aceleași informații de bază ale taxonomiilor (titlu) pentru mai multe CPT-uri, oferind în același timp posibilitatea de a personaliza aceste taxonomii (câmpuri personalizate, imagini etc) pentru diferite CPT-uri. Foarte tare!

P-S P-S
18 ian. 2019 13:44:19
1

Poți folosi acest cod, poate te va ajuta

add_action( 'init', 'create_client_tax' );
function create_client_tax() {
    register_taxonomy( 
            'client_tag', //taxonomia ta pentru etichete
            'client',  // Tipul tău de postare
            array( 
                'hierarchical'  => false, 
                'label'         => __( 'Etichete', CURRENT_THEME ), 
                'singular_name' => __( 'Etichetă', CURRENT_THEME ), 
                'rewrite'       => true, 
                'query_var'     => true 
            )  
        );
}
6 mar. 2018 20:26:19
Comentarii

O versiune simplificată a răspunsului deja acceptat. De asemenea, aceasta adaugă o întreagă nouă taxonomie în loc să folosească taxonomia existentă 'post_tag'.

acidrums4 acidrums4
11 iul. 2018 20:36:04
0

Aceasta funcționează întotdeauna bine. ref: https://developer.wordpress.org/plugins/post-types/registering-custom-post-types/

/**
* Crează taxonomii tag pentru CPT portfolio
*/
if ( ! function_exists( 'ns_register_team_category' ) ) {
function ns_register_team_category() {

   $labels = array(
    'name' => __( 'Etichete', 'ns' ),
    'singular_name' => __( 'Etichetă', 'ns' ),
    'search_items' =>  __( 'Caută Etichete' ),
    'popular_items' => __( 'Etichete Populare' ),
    'all_items' => __( 'Toate Etichetele' ),
    'parent_item' => null,
    'parent_item_colon' => null,
    'edit_item' => __( 'Editează Eticheta' ),
    'update_item' => __( 'Actualizează Eticheta' ),
    'add_new_item' => __( 'Adaugă Etichetă Nouă' ),
    'new_item_name' => __( 'Nume Etichetă Nouă' ),
    'separate_items_with_commas' => __( 'Separați etichetele cu virgule' ),
    'add_or_remove_items' => __( 'Adaugă sau elimină etichete' ),
    'choose_from_most_used' => __( 'Alege din cele mai folosite etichete' ),
    'menu_name' => __( 'Etichete' ),
   );

   $args = array(
    'label' => __( 'Etichetă', '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' => 'eticheta', 'with_front' => false, ),
    'show_admin_column' => false,
    'show_in_rest' => true,
    'rest_base' => 'eticheta',
    'rest_controller_class' => 'WP_REST_Terms_Controller',
    'show_in_quick_edit' => true,
    'update_count_callback' => '_update_post_term_count',
);
register_taxonomy( 'eticheta', array( 'portfolio' ), $args );
}
add_action( 'init', 'ns_register_team_category', 0 );
}
28 aug. 2020 14:12:42
1

Poți adăuga o taxonomie deja înregistrată la un tip de obiect, vezi codul de mai jos.

/**
 * Funcție pentru a adăuga selecția de etichete la un tip de postare personalizat
 */
function ns_reg_tag() {
   register_taxonomy_for_object_type('post_tag', 'Custom_Post_Type');
}
add_action('init', 'ns_reg_tag');
3 mar. 2021 13:44:55
Comentarii

Aceasta este cea mai bună soluție în prezent.

Marcio Duarte Marcio Duarte
6 apr. 2022 03:21:12
0

Deși răspunsul lui Marcus rezolvă majoritatea problemei, trebuie să știți că nu este o soluție completă. Răspunsul lui chifliiiii este mai complet, dar, așa cum s-a menționat în comentarii, nu refolosește taxonomia de taguri deja existentă.

Conform OP, o soluție trebuie să folosească „taxonomia de taguri” și nu „o taxonomie de taguri”. De aceea cred că răspunsul lui chifliiiii este incorect.

Pe de altă parte, cred că răspunsul lui Marcus este parțial corect, la fel și răspunsurile similare precum cel postat de Giovanni Putignano. Voi explica mai jos de ce.


O soluție completă

Prin înregistrarea tipului de postare personalizat la taxonomia post_tag, folosind fie metoda sugerată de Marcus, fie cea a lui Giovanni, postările etichetate ale tipului de postare personalizat nu vor fi afișate pe pagina de arhivă a tagului. Vor fi afișate doar postări de tipul post, deoarece șablonul încorporat pentru taguri este randat cu o interogare care vizează doar tipul de postare post. Pentru a remedia acest lucru, trebuie să modificați interogarea cu hook-ul pre_get_posts.

Aceasta este o metodă generică de a rezolva această problemă (nu mă întrebați de ce nu este implementată în nucleu):

add_action('pre_get_posts', function($query) {
  // Aceasta va vizualiza interogările folosite pentru a genera șablonul de arhivă pentru taguri.
  // Puteți elimina condiția `is_main_query()` dacă doriți să obțineți postări
  // după tag în afara buclei.
  if (!is_admin() && is_tag() && $query->is_main_query()) {
    // Va seta ceva de genul: Array( 'post', 'portfolio' )
    $types = get_taxonomy('post_tag')->object_type;

    // Modifică interogarea pentru a folosi doar tipurile care sunt înregistrate la
    // taxonomia `post_tag`.
    $query->set('post_type', $types);
  }
});
9 sept. 2020 15:25:00
0

În cazul meu, următorul cod a funcționat.

register_taxonomy( 'events_tag',array('events'),  array(
        'hierarchical' => false, 
        'label' => 'Tag',
        'show_admin_column' => true, 
        'singular_label' => 'Tag-ul tipului tău de postare',
        'query_var'         => true,
        'rewrite' => array( 'slug' => 'events_tag' ),
        'show_in_rest'       => true,
        'rest_base'          => 'events_tag',
        'rest_controller_class' => 'WP_REST_Terms_Controller',  
        )
    );
22 oct. 2022 14:15:03