Adăugare tag-uri la un tip de postare personalizat în WordPress
Folosesc framework-ul Cherry pe un site WordPress. Acesta vine cu un tip de postare personalizată care poate fi folosită pentru a adăuga 'Membri ai echipei' și pentru a crea pagini de personal etc.
Am nevoie să extind această funcționalitate pentru a putea adăuga tag-uri fiecărui 'membru al echipei', astfel încât să-i pot eticheta ca lucrând în departamentul a / b / c / etc.
Tipul de postare personalizată este înregistrat în fișierul theme-init.php folosind următorul cod:
/* Echipa noastră */
function my_post_type_team() {
register_post_type( 'team',
array(
'label' => theme_locals("our_team"),
'singular_label' => theme_locals("our_team"),
'_builtin' => false,
// 'exclude_from_search' => true, // Excludează din rezultatele căutării
'capability_type' => 'page',
'public' => true,
'show_ui' => true,
'show_in_nav_menus' => false,
'menu_position' => 5,
'menu_icon' => ( version_compare( $GLOBALS['wp_version'], '3.8', '>=' ) ) ? 'dashicons-businessman' : '',
'rewrite' => array(
'slug' => 'team-view',
'with_front' => FALSE,
),
'supports' => array(
'title',
'editor',
'thumbnail',
)
)
);
}
add_action('init', 'my_post_type_team');
Doresc să adaug tag-uri la această postare, astfel încât atunci când adaug un nou membru al echipei, să pot să-l atribui unui departament prin adăugarea unui tag relevant. În prezent, caseta de editare a tag-urilor nu apare pe pagina de adăugare/editare.
Așadar, am adaptat codul de mai sus pentru a include o înregistrare de taxonomie astfel:
/* Echipa noastră */
function my_post_type_team() {
register_post_type( 'team',
array(
'label' => theme_locals("our_team"),
'singular_label' => theme_locals("our_team"),
'_builtin' => false,
// 'exclude_from_search' => true, // Excludează din rezultatele căutării
'capability_type' => 'page',
'public' => true,
'show_ui' => true,
'show_in_nav_menus' => false,
'menu_position' => 5,
'menu_icon' => ( version_compare( $GLOBALS['wp_version'], '3.8', '>=' ) ) ? 'dashicons-businessman' : '',
'rewrite' => array(
'slug' => 'team-view',
'with_front' => FALSE,
),
'supports' => array(
'title',
'editor',
'thumbnail',
)
)
);
register_taxonomy(
'team_tag',
'team',
array(
'hierarchical' => false,
'label' => theme_locals("tags"),
'singular_name' => theme_locals("tag"),
'rewrite' => true,
'query_var' => true
)
);
}
add_action('init', 'my_post_type_team');
Totuși, caseta de tag-uri încă nu apare pe pagina de editare din admin.
Orice ajutor în această privință va fi foarte apreciat.

Se pare că problema a fost parțial cauzată de existența unui fișier theme-init.php în tema copil, care suprascria părți din fișierul theme-init.php din tema părinte / cadrul Cherry.
Am rezolvat problema adăugând următorul cod în fișierul theme-init.php al temei mele copil:
register_taxonomy('team_tag', 'team', array(
'hierarchical' => false,
'label' => theme_locals("tags"),
'singular_name' => theme_locals("tag"),
'rewrite' => true,
'query_var' => true
)
);

register_post_type( 'team',
array(
'label' => theme_locals("our_team"),
'singular_label' => theme_locals("our_team"),
'_builtin' => false,
// 'exclude_from_search' => true, // Excludează din Rezultatele Căutării
'capability_type' => 'page',
'public' => true,
'show_ui' => true,
'show_in_nav_menus' => false,
'menu_position' => 5,
'menu_icon' => ( version_compare( $GLOBALS['wp_version'], '3.8', '>=' ) ) ? 'dashicons-businessman' : '',
'rewrite' => array(
'slug' => 'team-view',
'with_front' => FALSE,
),
'supports' => array(
'title',
'editor',
'thumbnail',
),
'taxonomies' => array('team_tag')
)
);
Puteți observa că am adăugat parametrul taxonomies
în funcția register_post_type
.
Deși acest cod ar trebui să funcționeze, puteți încerca să creați relația mai târziu, cu acest cod:
add_action('init', 'add_tax_post_rel');
function add_tax_post_rel() {
register_taxonomy_for_object_type('team_tag', 'team', 11);
}

Mulțumesc pentru răspuns, dar asta nu face nimic. Dacă schimb 'team_tag' în 'tag' și apoi adaug 'tags' în array-ul de suport, primesc caseta de tag-uri în submeniu și pe pagina de editare. Totuși, aceasta folosește tag-urile globale ale site-ului.

@PhillHealey nu poate fi, tag-urile încorporate sunt sub taxonomia post_tag
, nu tag

@PhillHealey, am adăugat o modalitate alternativă de a crea relația.

Te rog să adaugi răspunsuri corecte, adică dacă adaugi cod, explică ce face codul tău și cum funcționează. Mulțumesc

Aceasta are cod aproape identic fără o definiție de funcție opacă la care utilizatorii nu au acces. În multe privințe, acesta ar trebui să fie codul folosit în răspunsul acceptat, deoarece se aplică tuturor platformelor WordPress, nu doar framework-ului Cherry, dacă nu există nicio explicație sau definiție a funcției. Chiar a stârnit o întrebare din partea ta.

Poți încerca această soluție:
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
)
);
}
Poate că te va ajuta.

Dacă aveți nevoie să afișați etichete pentru un tip de postare personalizat - iată un bun exemplu https://jamper.online/vyvod-tegov-tags-dlya-kastomnyh-postov-custom-post-type
function get_terms_by_custom_post_type( $post_type, $taxonomy ){
$args = array( 'post_type' => $post_type);
$loop = new WP_Query( $args );
$postids = array();
// construiește un array cu ID-urile postărilor
while ( $loop->have_posts() ) : $loop->the_post();
array_push($postids, get_the_ID());
endwhile;
// obține valorile taxonomiei bazate pe array-ul de ID-uri
$taxonomies = wp_get_object_terms( $postids, $taxonomy );
wp_reset_postdata();
return $taxonomies;
}
