it-swarm.com.de

Fügen Sie beim Erstellen einer neuen Taxonomie benutzerdefinierte Taxonomiefelder hinzu

Bearbeiten: Wichtiger Hinweis für WordPress v4.4 und höher

Diese Frage bot eine großartige Lösung für das Fehlen von Real Term Meta in älteren Versionen von WordPress, aber seit der Veröffentlichung von WordPress v4.4 wurde Real Term Meta eingeführt , und das ist definitiv der richtige Weg.

Hier ist ein Beitrag, der wie ein guter Ausgangspunkt für Begriff Meta in WordPress 4.4+ aussieht

Ich lasse diese Frage offen, da sie für jemanden, der sich mit älterem Code befasst, immer noch nützlich sein könnte, aber den obigen Hinweis hinzufügen wollte, damit Entwickler, die mit neuen Implementierungen von Term Meta beginnen, auf dem richtigen Weg sind.

Ende der Bearbeitung


Ich konnte das this Super-Tutorial von @Bainternet nutzen, um benutzerdefinierte Felder für Taxonomien hinzuzufügen. Ich habe das Markup optimiert und einen separaten Rückruf hinzugefügt, um der Administrationsseite "Neue Kategorie hinzufügen" Felder hinzuzufügen. Mein Code ist am Ende dieser Frage.

Ich bin allerdings auf eine GOTCHA gestoßen. Die Eingabe des benutzerdefinierten Felds wird auf der Seite Neue Kategorie hinzufügen angezeigt, das Feld wird jedoch nicht gespeichert.

Ich habe festgestellt, dass auf der Seite zum Hinzufügen neuer Taxonomien Ajax verwendet wird, und dies könnte Teil des Problems sein. Ich habe versucht, JS zu deaktivieren, und bin immer noch auf dasselbe Problem gestoßen. Ich habe im Kern nach einem Haken gesucht, aber keinen gefunden. Es gibt verschiedene Tutorials im Internet, aber alle scheinen sich auf den Taxonomiebearbeitungsbildschirm zu stützen, um ihre Gebote abzugeben.

Irgendwelche Ideen, wie man diese Arbeit macht?

/**
 * Add extra fields to custom taxonomy edit and add form callback functions
 */
// Edit taxonomy page
function extra_edit_tax_fields($tag) {
    // Check for existing taxonomy meta for term ID.
    $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( 'Category Navigation Image URL' ); ?></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( 'Enter the full URL to the navigation image used for this category.' ); ?></p>
        </td>
    </tr>
<?php
}
add_action( 'category_edit_form_fields', 'extra_edit_tax_fields', 10, 2 );

// Add taxonomy page
function extra_add_tax_fields( $tag ) {
    // Check for existing taxonomy meta for term ID.
    $t_id = $tag->term_id;
    $term_meta = get_option( "taxonomy_$t_id" ); ?>
    <div class="form-field">
        <label for="cat_Image_url"><?php _e( 'Category Navigation Image URL' ); ?></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( 'Enter the full URL to the navigation image used for this category.' ); ?></p>
    </div>
<?php
}
add_action( 'category_add_form_fields', 'extra_add_tax_fields', 10, 2 );

// Save extra taxonomy fields callback function.
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];
            }
        }
        // Save the option array.
        update_option( "taxonomy_$t_id", $term_meta );
    }
}   
add_action( 'edited_category', 'save_extra_taxonomy_fields', 10, 2 );   
//add_action( '...Can't find hook to enable saving custom fields when adding a new term
6
Dave Romsey

Gelöst!

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

Requisiten zum Category Meta Plugin . Ich habe verschiedene Kategorie-Meta-Plugins aus dem Repo WP heruntergeladen, und dieses hat die Möglichkeit, die Metadaten auf dem Bildschirm "Add New" (Neu hinzufügen) hinzuzufügen. Ich habe den Code durchgearbeitet und den schwer fassbaren Haken create_ {term} gefunden.

6
Dave Romsey

Ich denke, das Tutorial, auf das Sie verwiesen haben, war großartig und ich habe diesen Code daraus abgeleitet. Es speichert die Metas für die Taxonomie menu_category in den Formularen zum Hinzufügen und Bearbeiten für diese Taxonomie und zeigt sie im Bearbeitungsformular an. Der Eintrag in der Optionstabelle wäre taxomomy_24_metas für die Term-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];
        // This is an associative array with keys and values:
        // $term_metas = Array($meta_name => $meta_value, ...)
        $term_metas = get_option("taxonomy_{$term_id}_metas");
        if (!is_array($term_metas)) {
            $term_metas = Array();
        }
        // Save the meta value
        $term_metas[$meta_name] = $meta_value;
        update_option( "taxonomy_{$term_id}_metas", $term_metas );
    }
}

function menu_category_edit_form_fields ($term_obj) {
    // Read in the order from the options db
    $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 
}
4
Aram Kocharyan

Sie können dem Bildschirm zum Hinzufügen neuer Begriffsseiten ein benutzerdefiniertes Feld hinzufügen, indem Sie die folgenden Hooks verwenden:

  1. {Taxonomiename} _ Formularfelder hinzufügen
  2. {taxonomy_name} _ edit_form_fields
  3. bearbeitete _ {taxonomy_name}
  4. erstelle _ {taxonomy_name}

Sie können mehr sehen hier

 enter image description here 

2
shishir mishra
add_filter('created_term', 'update_{custom_taxonomy}_fields'); // you can name your callback function  as you like
function update_{custom_taxonomy}_fields($term_id) {
    if($_POST['taxonomy'] == '{custom_taxonomy}'): // a simple check to see if is you tax
        //do your update (I prefer in options table, but you can do it in any way you`d like)
    endif;
}

wenn Sie einen allgemeineren Hook wünschen, können Sie den "created_term" (mindestens ab 3.4) verwenden.

1
xlad

Sie können für Taxonomie-Manager Plugin gehen. Sie können eine neue Taxonomie hinzufügen und der ausgewählten Taxonomie benutzerdefinierte Felder hinzufügen (z. B. Bildfeld).

0
Dipesh KC