it-swarm.com.de

'Beschreibung' zu Taxonomie 'Schnellbearbeitung' hinzufügen

Dies scheint ziemlich einfach zu sein, aber ich kann keine eindeutige Anleitung zum Hinzufügen des Taxonomiebeschreibungsfelds zum Schnellbearbeitungsfeld finden.

Ich habe mehrere Lernprogramme zum Hinzufügen von Feldern zum benutzerdefinierten Schnellbearbeitungsfeld ausgeführt, aber die Kernfelder (Name, Beschreibung und Slug) folgen nicht denselben Richtlinien wie das Hinzufügen von benutzerdefinierten Feldern zum Schnellbearbeitungsfeld für Taxonomien.

Ist das überhaupt möglich? Wenn nicht - ich denke, die beste Alternative ist, ein weiteres 'Description'-Metafeld zu erstellen und es auf diese Weise dem Taxonomie-Schnellbearbeitungsfeld hinzuzufügen.

7
Roc

Normalerweise sollten Sie zum Hinzufügen von Feldern zum Schnellbearbeitungsfeld den Aktions-Hook 'quick_edit_custom_box' verwenden, der nur für benutzerdefinierte Spalten ausgelöst wird, da Kernspalten explizit ausgeschlossen werden ( siehe Code ).

Wenn wir eine benutzerdefinierte Spalte hinzufügen, wird diese in der Listentabelle angezeigt, ist jedoch nicht sinnvoll, da die Spaltenbeschreibung bereits vorhanden ist.

Wir haben jedoch die Möglichkeit, eine unsichtbare Spalte mit 2 Tricks hinzuzufügen:

  1. Festlegen der Bezeichnung einer leeren Zeichenfolge (auf diese Weise wird sie in den Einstellungen für "Bildschirmoption" nicht angezeigt)
  2. Erzwingen Sie das Ausblenden der Spalte, indem Sie auf den get_user_option_manageedit-{$taxonomy}columnshidden-Filterhook einwirken

Erstellen Sie zuerst die unsichtbare Spalte:

/* 
 * This is NOT required, but I'm using it to easily let you customize the taxonomy
 * where to add the inline description.
 * You can replace $the_target_tax in all the code with the name of your taxonomy,
 * with no need to use the global variable.
 */
global $the_target_tax;
$the_target_tax = 'category';

add_filter( "manage_edit-{$the_target_tax}_columns", function( $columns ) {
    $columns['_description'] = '';
    return $columns;
});

add_filter( "manage_{$the_target_tax}_custom_column", function( $e, $column, $term_id ) {
    if ( $column === '_description' ) return '';
}, 10, 3 );

add_filter( "get_user_option_manageedit-{$the_target_tax}columnshidden", function( $r ) {
    $r[] = '_description';
    return $r;
});

Jetzt haben wir eine benutzerdefinierte Spalte '_description', die unsichtbar ist, aber verwendet werden kann, um zusätzliche Felder über den Hook 'quick_edit_custom_box' einzufügen:

Dieser Hook übergibt jedoch keinen aktuellen Wert, um das Feld mit der aktuellen Beschreibung vorab zu füllen, aber wir können ein paar Zeilen von jQuery verwenden, um dies zu tun:

add_action( 'quick_edit_custom_box', function( $column, $screen, $tax ) {
    if ( $screen !== 'edit-tags' ) return;
    $taxonomy = get_taxonomy( $tax );
    if ( ! current_user_can( $taxonomy->cap->edit_terms ) ) return;
    global $the_target_tax;
    if ( $tax !== $the_target_tax || $column !== '_description' ) return;
    ?>
    <fieldset>
        <div class="inline-edit-col">
        <label>
            <span class="title"><?php _e('Description'); ?></span>
            <span class="input-text-wrap">
            <textarea id="inline-desc" name="description" rows="3" class="ptitle"></textarea>
            </span>
        </label>
        </div>
    </fieldset>
    <script>
    jQuery('#the-list').on('click', 'a.editinline', function(){
        var now = jQuery(this).closest('tr').find('td.column-description').text();
        jQuery('#inline-desc').text( now );
    });
    </script>
    <?php
}, 10, 3 );

Jetzt, da wir das Formular haben, müssen wir die Daten bei der Übermittlung speichern, ziemlich einfach mit "edited_{$taxonomy}" hook:

function save_inline_description( $term_id ) {
    global $the_target_tax;
    $tax = get_taxonomy( $the_target_tax );
    if (
        current_filter() === "edited_{$the_target_tax}"
        && current_user_can( $tax->cap->edit_terms )
    ) {
        $description = filter_input( INPUT_POST, 'description', FILTER_SANITIZE_STRING );
        // removing action to avoid recursion
        remove_action( current_filter(), __FUNCTION__ );
        wp_update_term( $term_id, $the_target_tax, array( 'description' => $description ) );
    }
}
add_action( "edited_{$the_target_tax}", 'save_inline_description' );

Code wurde schnell getestet und scheint zu funktionieren. Beachten Sie, dass hierfür PHP 5.3+ erforderlich ist.

Add description to taxonomy quick edit

15
gmazzap

Ich wollte nur darauf hinweisen, dass ich den Code nicht zum Laufen bringen konnte, ohne den Parameter 'category' in meinen benutzerdefinierten Taxonomienamen zu ändern.

Zum Beispiel:

wp_update_term( $term_id, 'category', array( 'description' => $description ) );

wurde ersetzt durch:

wp_update_term( $term_id, 'my_custom_tax_name', array( 'description' => $description ) );

Prost!

0
Leo