web-dev-qa-db-fra.com

Ajouter 'Description' à la taxonomie 'Edition rapide'

Cela semble assez simple, mais je ne trouve pas de guide précis sur la manière d’ajouter le champ de description de taxonomie à la zone d’édition rapide.

J'ai suivi plusieurs tutoriels sur l'ajout de champs à la zone d'édition rapide personnalisée, mais les champs principaux (nom, description et slug) ne suivent pas les mêmes instructions que l'ajout de champs personnalisés à la zone d'édition rapide de taxonomie.

Est-il même possible de le faire? Sinon, je suppose que la meilleure solution consiste à créer un autre méta-champ 'Description' et à l'ajouter à la zone d'édition rapide de la taxonomie.

7
Roc

Normalement, pour ajouter des champs au champ d'édition rapide, nous devrions utiliser le hook d'action 'quick_edit_custom_box' qui est déclenché uniquement pour les colonnes personnalisées, car les colonnes principales sont explicitement exclues ( voir code ).

Si nous ajoutons une colonne personnalisée, elle sera affichée dans la liste, mais cela n’a aucun sens, car la description de la colonne est déjà présente.

Cependant, nous avons la possibilité d'ajouter une colonne invisible en utilisant 2 astuces:

  1. Définition de son libellé sur une chaîne vide (de cette manière, cela n’apparaît pas dans les paramètres "Options d’écran")
  2. Forcer la colonne à être masquée en agissant sur le crochet de filtre get_user_option_manageedit-{$taxonomy}columnshidden

Commencez par créer la colonne invisible:

/* 
 * 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;
});

Nous avons maintenant une colonne personnalisée '_description' qui est invisible, mais qui peut être utilisée pour insérer des champs supplémentaires via le hook 'quick_edit_custom_box':

Cependant, ce hook ne transmet aucune valeur actuelle pour pré-remplir le champ avec la description actuelle, mais nous pouvons utiliser quelques lignes de jQuery pour le faire:

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 );

Maintenant que nous avons le formulaire, nous devons enregistrer les données lors de la soumission, très facilement à l'aide de "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' );

Le code a été rapidement testé et semble fonctionner. Notez qu'il nécessite PHP 5.3+.

Add description to taxonomy quick edit

15
gmazzap

Je voulais juste souligner que je n’étais pas capable de faire fonctionner le code sans changer le paramètre 'category' en mon nom de taxonomie personnalisé.

Par exemple:

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

a été remplacé par:

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

À votre santé!

0
Leo