Aggiungere campi personalizzati alla tassonomia durante la creazione di una nuova tassonomia

23 set 2011, 23:46:39
Visualizzazioni: 21.7K
Voti: 8

Modifica: Nota importante per WordPress v4.4 e versioni successive

Questa domanda utilizzava un ottimo workaround per la mancanza di meta dati reali dei termini nelle versioni precedenti di WordPress, ma dalla release di WordPress v4.4, sono stati introdotti i meta dati reali dei termini, e questo è decisamente l'approccio da seguire ora.

Ecco un articolo che sembra un buon punto di partenza per i meta dati dei termini in WordPress 4.4+

Lascio questa domanda perché potrebbe essere ancora utile per chi gestisce codice più vecchio, ma ho voluto aggiungere la nota sopra in modo che gli sviluppatori che iniziano nuove implementazioni di meta dati dei termini seguano la strada giusta.

Fine della modifica


Sono riuscito a sfruttare questo super tutorial di @Bainternet per aggiungere campi personalizzati alle tassonomie. Ho modificato il markup e aggiunto una callback separata per aggiungere campi alla pagina amministrativa "Aggiungi Nuova Categoria". Il mio codice è alla fine di questa domanda.

Ho però incontrato un problema; il campo personalizzato appare nella pagina di aggiunta nuova categoria, ma il campo non viene salvato.

Ho notato che la pagina di aggiunta nuova tassonomia usa ajax, e questo potrebbe essere parte del problema. Ho provato a disabilitare JS, ma ho ancora lo stesso problema. Ho cercato nel core alla ricerca di un hook, ma non riesco a trovarne uno. Ci sono vari tutorial in rete, ma sembrano tutti basarsi sulla schermata di modifica della tassonomia per funzionare.

Qualche idea su come farlo funzionare?

/**
 * Funzioni di callback per aggiungere campi extra al form di modifica e aggiunta della tassonomia personalizzata
 */
// Pagina modifica tassonomia
function extra_edit_tax_fields($tag) {
    // Controlla i meta della tassonomia esistenti per l'ID del termine
    $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 Immagine Navigazione Categoria' ); ?></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( 'Inserisci l\'URL completo dell\'immagine di navigazione utilizzata per questa categoria.' ); ?></p>
        </td>
    </tr>
<?php
}
add_action( 'category_edit_form_fields', 'extra_edit_tax_fields', 10, 2 );

// Pagina aggiungi tassonomia
function extra_add_tax_fields( $tag ) {
    // Controlla i meta della tassonomia esistenti per l'ID del termine
    $t_id = $tag->term_id;
    $term_meta = get_option( "taxonomy_$t_id" ); ?>
    <div class="form-field">
        <label for="cat_Image_url"><?php _e( 'URL Immagine Navigazione Categoria' ); ?></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( 'Inserisci l\'URL completo dell\'immagine di navigazione utilizzata per questa categoria.' ); ?></p>
    </div>
<?php
}
add_action( 'category_add_form_fields', 'extra_add_tax_fields', 10, 2 );

// Funzione di callback per salvare i campi extra della tassonomia
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];
            }
        }
        // Salva l'array delle opzioni
        update_option( "taxonomy_$t_id", $term_meta );
    }
}   
add_action( 'edited_category', 'save_extra_taxonomy_fields', 10, 2 );   
//add_action( '...Non riesco a trovare l'hook per abilitare il salvataggio dei campi personalizzati quando si aggiunge un nuovo termine
0
Tutte le risposte alla domanda 5
3

Risolto!

add_action( 'create_category', 'save_extra_taxonomy_fields', 10, 2 );   

Grazie al plugin Category Meta. Ho scaricato vari plugin per i meta delle categorie dal repository di WordPress, e questo ha la capacità di aggiungere i meta dati nella schermata Aggiungi Nuovo. Ho esaminato il codice e ho trovato l'elusivo hook create_{term}.

24 set 2011 00:37:43
Commenti

Mi sono imbattuto nel tuo post nel tentativo di capire perché il mio codice non funziona come previsto - wordpress.stackexchange.com/questions/417562/…. Sto usando la maggior parte di quanto hai elencato, ma per qualche strana ragione, i meta dei termini non vengono salvati la prima volta, ma vengono salvati per ogni invio successivo. Apprezzerei se potessi indicarmi la direzione giusta.

Motivated Motivated
21 lug 2023 13:44:19

Ciao @Motivated, il codice pubblicato qui è molto obsoleto e non dovrebbe più essere utilizzato. WP 4.4 ha introdotto la Term Meta API che dovrebbe essere usata invece. Ecco un articolo che spiega come può essere utilizzata: https://www.smashingmagazine.com/2015/12/how-to-use-term-meta-data-in-wordpress/

Dave Romsey Dave Romsey
22 lug 2023 20:30:37

grazie. L'esempio di codice che ho pubblicato utilizzava la Term Meta API, ma per qualche strana ragione, non viene attivato la prima volta che il campo personalizzato viene inviato.

Motivated Motivated
23 lug 2023 08:10:03
1

Penso che il tutorial a cui ti riferivi fosse ottimo e ho basato questo codice su di esso. Memorizza i meta per la tassonomia menu_category nei moduli di aggiunta e modifica per quella tassonomia, e li visualizza nel modulo di modifica. La voce nella tabella delle opzioni sarebbe taxomomy_24_metas per il termine con ID 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];
        // Questo è un array associativo con chiavi e valori:
        // $term_metas = Array($meta_name => $meta_value, ...)
        $term_metas = get_option("taxonomy_{$term_id}_metas");
        if (!is_array($term_metas)) {
            $term_metas = Array();
        }
        // Salva il valore meta
        $term_metas[$meta_name] = $meta_value;
        update_option( "taxonomy_{$term_id}_metas", $term_metas );
    }
}

function menu_category_edit_form_fields ($term_obj) {
    // Legge l'ordine dal database delle opzioni
    $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('Ordine Categoria', ''); ?></label>
            </th>
            <td>
                <input type="text" id="order" name="order" value="<?php echo $order; ?>"/>
            </td>
        </tr>
<?php 
}
7 feb 2012 12:35:05
Commenti

Non funziona più. Si prega di aggiornare.

Brad Dalton Brad Dalton
11 mag 2017 04:01:18
1

Puoi aggiungere campi personalizzati alla schermata di aggiunta di un nuovo termine utilizzando i seguenti hook:

  1. {taxonomy_name}_add_form_fields
  2. {taxonomy_name}_edit_form_fields
  3. edited_{taxonomy_name}
  4. create_{taxonomy_name}

Aggiunta campi personalizzati alla tassonomia

14 feb 2017 23:52:36
Commenti

Il link è rotto!

Jimmy Adaro Jimmy Adaro
9 mag 2019 00:23:14
0
add_filter('created_term', 'aggiorna_campi_{custom_taxonomy}'); // puoi nominare la tua funzione di callback come preferisci
function aggiorna_campi_{custom_taxonomy}($term_id) {
    if($_POST['taxonomy'] == '{custom_taxonomy}'): // un semplice controllo per verificare se è la tua tassonomia
        //fai il tuo aggiornamento (preferisco nella tabella options, ma puoi farlo in qualsiasi modo tu preferisca)
    endif;
}

se vuoi un hook più generico, puoi usare "created_term" (almeno dalla versione 3.4)

30 dic 2012 23:14:01
0

Puoi optare per il plugin Taxonomy Manager. Puoi aggiungere una nuova tassonomia e anche campi personalizzati alla tassonomia scelta (ad esempio un campo immagine).

28 nov 2011 14:00:30