Normalerweise sollten wir zum Hinzufügen von Feldern zum Schnellbearbeitungsfeld einen 'quick_edit_custom_box'
Aktions-Hook verwenden, der nur für benutzerdefinierte Spalten ausgelöst wird, da Kernspalten explizit ausgeschlossen sind ( 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 zwei Tricks hinzuzufügen :
- Setzen Sie die Beschriftung auf eine leere Zeichenfolge (auf diese Weise wird sie in den Einstellungen für "Bildschirmoption" nicht angezeigt).
- Erzwingen Sie das Ausblenden der Säule am
get_user_option_manageedit-{$taxonomy}columnshidden
Filterhaken
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 'quick_edit_custom_box'
Hook einzufügen:
Dieser Hook übergibt jedoch keinen aktuellen Wert, um das Feld mit der aktuellen Beschreibung vorab zu füllen. Wir können jedoch einige 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 );
Nachdem wir das Formular haben, müssen wir die Daten beim Senden speichern, ganz 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 PHP 5.3+ erforderlich ist.