Un client qui gère un catalogue de plus de deux cents fiches produit sur un CPT personnalisé nous a demandé un jour, avec une pointe d’exaspération légitime : « Pourquoi je dois ouvrir chaque fiche une par une juste pour changer une référence fournisseur ? » Sa référence fournisseur était stockée en champ personnalisé, invisible depuis la liste, et invisible également depuis le panneau de modification rapide.
La Quick Edit, ce panneau qui s’ouvre en ligne sans recharger la page, peut pourtant accueillir n’importe quel champ personnalisé. Cela demande trois étapes précises : afficher le champ dans le panneau, le préremplir en JavaScript avec la valeur existante, puis enregistrer la nouvelle valeur côté serveur.
Étape 1 : ajouter le champ dans le panneau
Le hook quick_edit_custom_box s’exécute pour chaque colonne personnalisée déclarée dans la liste des contenus. Il faut donc d’abord avoir enregistré une colonne, même minimaliste, via manage_{post_type}_posts_columns, puis cibler cette colonne précise dans le rendu du panneau :
function fp_champ_quick_edit( $nom_colonne, $post_type ) {
if ( 'reference_fournisseur' !== $nom_colonne || 'produit' !== $post_type ) {
return;
}
?>
<fieldset>
<div class="inline-edit-col">
<label>
<span class="title">Réf. fournisseur</span>
<input type="text" name="reference_fournisseur" value="" />
</label>
</div>
</fieldset>
<?php
}
add_action( 'quick_edit_custom_box', 'fp_champ_quick_edit', 10, 2 );

Étape 2 : préremplir le champ en JavaScript
C’est l’étape la plus souvent oubliée. Le panneau Quick Edit est un unique gabarit HTML réutilisé pour chaque ligne : sans script pour aller chercher la donnée déjà présente dans le tableau et l’injecter dans le champ, celui-ci reste systématiquement vide à l’ouverture. La valeur doit d’abord être stockée dans une colonne cachée ou un attribut de données, puis récupérée au moment de l’ouverture :
jQuery( function( $ ) {
var wp_inline_edit_originale = inlineEditPost.edit;
inlineEditPost.edit = function( id ) {
wp_inline_edit_originale.apply( this, arguments );
var post_id = ( typeof id === 'object' ) ? parseInt( this.getId( id ), 10 ) : 0;
if ( ! post_id ) {
return;
}
var $ligne = $( '#post-' + post_id );
var valeur = $ligne.find( '.column-reference_fournisseur' ).text().trim();
$( '#edit-' + post_id + ' input[name="reference_fournisseur"]' ).val( valeur );
};
} );
Ce script écrase la fonction inlineEditPost.edit native pour y greffer un comportement additionnel, technique standard pour interagir avec la Quick Edit sans réécrire tout le panneau.
Étape 3 : enregistrer la valeur soumise
À l’enregistrement, WordPress déclenche save_post comme pour n’importe quelle sauvegarde classique. Il faut distinguer une sauvegarde Quick Edit d’un enregistrement d’écran complet, ce que permet la présence du champ caché _inline_edit propre à ce panneau :
function fp_enregistrer_champ_quick_edit( $post_id ) {
if ( ! isset( $_POST['_inline_edit'] ) || ! isset( $_POST['reference_fournisseur'] ) ) {
return;
}
if ( ! current_user_can( 'edit_post', $post_id ) ) {
return;
}
update_post_meta(
$post_id,
'reference_fournisseur',
sanitize_text_field( $_POST['reference_fournisseur'] )
);
}
add_action( 'save_post_produit', 'fp_enregistrer_champ_quick_edit' );
Vérifier le résultat avant de livrer
- Ouvrir la Quick Edit sur deux lignes différentes successivement : la valeur affichée doit correspondre à chaque produit, pas rester bloquée sur la première ligne ouverte.
- Tester une sauvegarde groupée via « Modification groupée » (Bulk Edit) : ce champ personnalisé n’y apparaît pas automatiquement et nécessite un traitement séparé si le besoin existe.
- Confirmer que la colonne affichée dans le tableau se met bien à jour après l’enregistrement, sans rechargement complet de page.
Le piège classique sur ce type de fonctionnalité n’est jamais côté PHP, mais toujours côté JavaScript : neuf fois sur dix, un champ Quick Edit qui reste vide signale un oubli de préremplissage, pas un problème d’enregistrement.
En résumé
Trois hooks bien articulés suffisent à intégrer un champ personnalisé dans la Quick Edit : quick_edit_custom_box pour l’affichage, un script de préremplissage pour l’ergonomie, save_post pour la persistance. Cette fonctionnalité se distingue nettement de l’ajout de colonnes triables dans le tableau, déjà traité séparément, même si les deux se combinent naturellement.