Adăugarea câmpurilor personalizate pentru taxonomie la crearea unei noi taxonomii
Editare: Notă importantă pentru WordPress v4.4 și versiunile ulterioare
Această întrebare a folosit o soluție alternativă pentru lipsa meta datelor reale în versiunile mai vechi de WordPress, dar începând cu lansarea WordPress v4.4, au fost introduse meta date reale pentru termeni, și aceasta este cu siguranță calea de urmat acum.
Aici este un articol care pare un punct de plecare bun pentru meta date în WordPress 4.4+
Las această întrebare disponibilă deoarece ar putea fi încă utilă pentru cineva care lucrează cu cod mai vechi, dar am vrut să adaug nota de mai sus pentru ca dezvoltatorii care încep implementări noi de meta date pentru termeni să fie pe drumul cel bun.
Sfârșitul editării
Am reușit să folosesc acest tutorial super de la @Bainternet pentru a adăuga câmpuri personalizate pentru taxonomii. Am modificat marcajul și am adăugat un callback separat pentru a adăuga câmpuri în pagina de administrare "Adaugă Categorie Nouă". Codul meu este la sfârșitul acestei întrebări.
M-am lovit totuși de o problemă; câmpul personalizat apare pe pagina de adăugare categorie nouă, dar câmpul nu este salvat.
Am observat că pagina de adăugare taxonomie nouă folosește ajax, și asta ar putea fi parte din problemă. Am încercat să dezactivez JS și tot mă lovesc de aceeași problemă. Am căutat prin codul sursă după un hook, dar nu pot găsi unul. Există diverse tutoriale pe internet, dar toate par să se bazeze pe ecranul de editare taxonomie pentru a-și face treaba.
Aveți idei cum să fac asta să funcționeze?
/**
* Adaugă funcții callback pentru câmpuri suplimentare la formularul de editare și adăugare taxonomie
*/
// Pagina de editare taxonomie
function extra_edit_tax_fields($tag) {
// Verifică meta datele existente pentru ID-ul termenului
$t_id = $tag->term_id;
$term_meta = get_option( "taxonomy_$t_id" ); ?>
<tr class="form-field">
<th scope="row" valign="top"><label for="cat_Image_url"><?php _e( 'URL Imagine Navigare Categorie' ); ?></label></th>
<td>
<input type="text" name="term_meta[img]" id="term_meta[img]" value="<?php echo esc_attr( $term_meta['img'] ) ? esc_attr( $term_meta['img'] ) : ''; ?>">
<p class="description"><?php _e( 'Introduceți URL-ul complet către imaginea de navigare folosită pentru această categorie.' ); ?></p>
</td>
</tr>
<?php
}
add_action( 'category_edit_form_fields', 'extra_edit_tax_fields', 10, 2 );
// Pagina de adăugare taxonomie
function extra_add_tax_fields( $tag ) {
// Verifică meta datele existente pentru ID-ul termenului
$t_id = $tag->term_id;
$term_meta = get_option( "taxonomy_$t_id" ); ?>
<div class="form-field">
<label for="cat_Image_url"><?php _e( 'URL Imagine Navigare Categorie' ); ?></label>
<input type="text" name="term_meta[img]" id="term_meta[img]" value="<?php echo esc_attr( $term_meta['img'] ) ? esc_attr( $term_meta['img'] ) : ''; ?>">
<p class="description"><?php _e( 'Introduceți URL-ul complet către imaginea de navigare folosită pentru această categorie.' ); ?></p>
</div>
<?php
}
add_action( 'category_add_form_fields', 'extra_add_tax_fields', 10, 2 );
// Funcția callback pentru salvarea câmpurilor suplimentare taxonomie
function save_extra_taxonomy_fields( $term_id ) {
if ( isset( $_POST['term_meta'] ) ) {
$t_id = $term_id;
$term_meta = get_option( "taxonomy_$t_id" );
$cat_keys = array_keys( $_POST['term_meta'] );
foreach ( $cat_keys as $key ) {
if ( isset ( $_POST['term_meta'][$key] ) ) {
$term_meta[$key] = $_POST['term_meta'][$key];
}
}
// Salvează array-ul de opțiuni
update_option( "taxonomy_$t_id", $term_meta );
}
}
add_action( 'edited_category', 'save_extra_taxonomy_fields', 10, 2 );
//add_action( '...Nu pot găsi hook-ul pentru a permite salvarea câmpurilor personalizate la adăugarea unui termen nou

Rezolvat!
add_action( 'create_category', 'save_extra_taxonomy_fields', 10, 2 );
Mulțumiri plugin-ului Category Meta. Am descărcat diverse plugin-uri pentru meta date de categorie din depozitul WP, iar acesta are abilitatea de a adăuga meta datele pe ecranul Adaugă Nou. Am investigat codul și am găsit hook-ul evaziv create_{term}.

Am dat peste postarea ta în încercarea de a descoperi de ce codul meu nu funcționează cum trebuie - wordpress.stackexchange.com/questions/417562/…. Folosesc mare parte din ce ai enumerat, dar din nu știu ce motiv, metadatele termenului nu se salvează prima dată, dar funcționează pentru fiecare trimitere ulterioară. Aș aprecia dacă m-ai putea îndruma în direcția corectă.

Bună @Motivated, codul postat aici este foarte învechit și nu ar trebui mai folosit. WP 4.4 a introdus Term Meta API care ar trebui utilizat în schimb. Iată un articol care explică cum poate fi folosit: https://www.smashingmagazine.com/2015/12/how-to-use-term-meta-data-in-wordpress/

Cred că tutorialul la care te-ai referit a fost grozav și am bazat acest cod pe el. Stochează metadatele pentru taxonomia menu_category
în formularul de adăugare și editare pentru acea taxonomie și le afișează în formularul de editare. Intrarea în tabelul de opțiuni ar fi taxomomy_24_metas
pentru termenul cu ID-ul 24.
add_action('menu_category_edit_form_fields','menu_category_edit_form_fields');
add_action('menu_category_add_form_fields','menu_category_edit_form_fields');
add_action('edited_menu_category', 'menu_category_save_form_fields', 10, 2);
add_action('created_menu_category', 'menu_category_save_form_fields', 10, 2);
function menu_category_save_form_fields($term_id) {
$meta_name = 'order';
if ( isset( $_POST[$meta_name] ) ) {
$meta_value = $_POST[$meta_name];
// Acesta este un array asociativ cu chei și valori:
// $term_metas = Array($meta_name => $meta_value, ...)
$term_metas = get_option("taxonomy_{$term_id}_metas");
if (!is_array($term_metas)) {
$term_metas = Array();
}
// Salvează valoarea meta
$term_metas[$meta_name] = $meta_value;
update_option( "taxonomy_{$term_id}_metas", $term_metas );
}
}
function menu_category_edit_form_fields ($term_obj) {
// Citește ordinea din baza de date de opțiuni
$term_id = $term_obj->term_id;
$term_metas = get_option("taxonomy_{$term_id}_metas");
if ( isset($term_metas['order']) ) {
$order = $term_metas['order'];
} else {
$order = '0';
}
?>
<tr class="form-field">
<th valign="top" scope="row">
<label for="order"><?php _e('Category Order', ''); ?></label>
</th>
<td>
<input type="text" id="order" name="order" value="<?php echo $order; ?>"/>
</td>
</tr>
<?php
}

add_filter('created_term', 'actualizeaza_campuri_{custom_taxonomy}'); // poți denumi funcția callback cum dorești
function actualizeaza_campuri_{custom_taxonomy}($term_id) {
if($_POST['taxonomy'] == '{custom_taxonomy}'): // o simplă verificare pentru a vedea dacă este taxonomia ta
//efectuează actualizarea (prefer în tabelul de opțiuni, dar poți face asta în orice mod dorești)
endif;
}
dacă dorești un hook mai general, poți folosi "created_term" (cel puțin de la versiunea 3.4)

Puteți opta pentru plugin-ul manager de taxonomii. Puteți adăuga o nouă taxonomie, plus câmpuri personalizate pentru taxonomia aleasă (de exemplu, câmp pentru imagine).
