J'essaie d'ajouter une colonne personnalisée pour poster rapidement l'édition et tout fonctionne presque. La méta personnalisée est enregistrée et transmise, mais si je clique sur l’édition rapide, l’aperçu est vierge. C’est l’erreur qu’elle me donne: Remarque: Variable non définie: post_id dans /home/etimueit/public_html/wp-content/themes/caru/functions.php à la ligne 626
Voici mon code.
function disponibilitaet_quickedit_custom_posts_columns( $posts_columns ) { $posts_columns['disponibilitaet_edit_time'] = __( 'Modifica Disponibilità', 'disponibilitaet' ); return $posts_columns; } add_filter( 'manage_post_posts_columns', 'disponibilitaet_quickedit_custom_posts_columns' );
function disponibilitaet_quickedit_custom_column_display( $column_name, $post_id ) {
if ( 'disponibilitaet_edit_time' == $column_name ) {
$dispo_registrata = get_post_meta( $post_id, 'disponibilitaet_edit_time', true );
if ( $dispo_registrata ) {
echo esc_html( $dispo_registrata );
} else {
esc_html_e( 'N/A', 'disponibilitaet' );
}
}
}
add_action( 'manage_post_posts_custom_column', 'disponibilitaet_quickedit_custom_column_display', 10, 2 );
function disponibilitaet_quickedit_fields( $column_name, $post_type ) {
if ( 'disponibilitaet_edit_time' != $column_name )
return;`
// Ceci est la ligne 626
$dispo_registrata = get_post_meta( $post_id, 'disponibilitaet_edit_time', true );
?>
<fieldset class="inline-edit-col-right">
<div class="inline-edit-col">
<label>
<span class="title"><?php esc_html_e( 'Disponibilità', 'disponibilitaet' ); ?></span>
<span class="input-text-wrap">
<input type="text" name="disponibilitaet_edit_time" class="disponibilitaetedittime" value="<?php echo $dispo_registrata;?>">
</span>
</label>
</div>
</fieldset>
<?php
}
add_action( 'quick_edit_custom_box', 'disponibilitaet_quickedit_fields', 10, 2 );
function disponibilitaet_quickedit_save_post( $post_id, $post ) {
// if called by autosave, then bail here
if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE )
return;
// if this "post" post type?
if ( $post->post_type != 'post' )
return;
// does this user have permissions?
if ( ! current_user_can( 'edit_post', $post_id ) )
return;
// update!
if ( isset( $_POST['disponibilitaet_edit_time'] ) ) {
update_post_meta( $post_id, 'disponibilitaet_edit_time', $_POST['disponibilitaet_edit_time'] );
}
}
add_action( 'save_post', 'disponibilitaet_quickedit_save_post', 10, 2 );
function disponibilitaet_quickedit_javascript() {
$current_screen = get_current_screen();
if ( $current_screen->id != 'edit-post' || $current_screen->post_type != 'post' )
return;
// Ensure jQuery library loads
wp_enqueue_script( 'jquery' );
?>
<script type="text/javascript">
jQuery( function( $ ) {
$( '#the-list' ).on( 'click', 'a.editinline', function( e ) {
e.preventDefault();
var editTime = $(this).data( 'edit-time' );
inlineEditPost.revert();
$( '.disponibilitaetedittime' ).val( editTime ? editTime : '' );
});
});
</script>
<?php
}
add_action( 'admin_print_footer_scripts-edit.php', 'disponibilitaet_quickedit_javascript' );
Nous y voilà, enfin trouvé une solution, je la laisse ici donc peut-être que ça peut aider (peut-être aussi future me XD).
/**
* * Disponibilité Rapide Édition Rapide * /
function etdispo_quickedit_custom_posts_columns( $posts_columns ) {
$posts_columns['et2018-quantita_birra'] = __( 'Disponibilità', 'etdispo' );
return $posts_columns;
}
add_filter( 'manage_post_posts_columns', 'etdispo_quickedit_custom_posts_columns' );
function etdispo_quickedit_custom_column_display( $column_name, $post_id ) {
if ( 'et2018-quantita_birra' == $column_name ) {
$etdispo_regi = get_post_meta( $post_id, 'et2018-quantita_birra', true );
if ( $etdispo_regi ) {
echo esc_html( $etdispo_regi );
} else {
esc_html_e( 'N/A', 'etdispo' );
}
}
}
add_action( 'manage_post_posts_custom_column', 'etdispo_quickedit_custom_column_display', 10, 2 );
function etdispo_quickedit_fields( $column_name, $post_type, $post_id ) {
if ( 'et2018-quantita_birra' != $column_name )
return;
$etdispo_regi = get_post_meta( $post_id, 'et2018-quantita_birra', true );
?>
<fieldset class="inline-edit-col-right">
<div class="inline-edit-col">
<label>
<span class="title"><?php esc_html_e( 'Disponibilità', 'etdispo' ); ?></span>
<span class="input-text-wrap">
<input type="text" name="et2018-quantita_birra" class="etdispoedit" value="">
</span>
</label>
</div>
</fieldset>
<?php
}
add_action( 'quick_edit_custom_box', 'etdispo_quickedit_fields', 10, 3 );
function etdispo_quickedit_save_post( $post_id, $post ) {
// if called by autosave, then bail here
if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE )
return;
// if this "post" post type?
if ( $post->post_type != 'post' )
return;
// does this user have permissions?
if ( ! current_user_can( 'edit_post', $post_id ) )
return;
// update!
if ( isset( $_POST['et2018-quantita_birra'] ) ) {
update_post_meta( $post_id, 'et2018-quantita_birra', $_POST['et2018-quantita_birra'] );
}
}
add_action( 'save_post', 'etdispo_quickedit_save_post', 10, 2 );
function etdispo_quickedit_javascript() {
$current_screen = get_current_screen();
if ( $current_screen->id != 'edit-post' || $current_screen->post_type != 'post' )
return;
// Ensure jQuery library loads
wp_enqueue_script( 'jquery' );
?>
<script type="text/javascript">
jQuery( function( $ ) {
$( '#the-list' ).on( 'click', 'a.editinline', function( e ) {
e.preventDefault();
var editDispo = $(this).data( 'edit-dispo' );
inlineEditPost.revert();
$( '.etdispoedit' ).val( editDispo ? editDispo : '' );
});
});
</script>
<?php
}
add_action( 'admin_print_footer_scripts-edit.php', 'etdispo_quickedit_javascript' );
/* Qui */
function etdispo_quickedit_set_data( $actions, $post ) {
$found_value = get_post_meta( $post->ID, 'et2018-quantita_birra', true );
if ( $found_value ) {
if ( isset( $actions['inline hide-if-no-js'] ) ) {
$new_attribute = sprintf( 'data-edit-dispo="%s"', esc_attr( $found_value ) );
$actions['inline hide-if-no-js'] = str_replace( 'class=', "$new_attribute class=", $actions['inline hide-if-no-js'] );
}
}
return $actions;
}
add_filter('post_row_actions', 'etdispo_quickedit_set_data', 10, 2);
Désolé, j'ai dû modifier ma réponse après avoir vérifié le codex WordPress lors de l'ajout de données modifiables personnalisées à la modification rapide. Vous devrez donc également supprimer les références à $post_id
(à partir des arguments add_action
et de votre fonction).
Il semble que le quick_edit_custom_box
ne prenne que 2 arguments: $column_name
et $post_type
. Ensuite, pour obtenir et afficher la valeur, ceci doit être fait en utilisant plus de PHP et Javascript.
Si vous lisez plus loin dans le Codex WordPress sur la modification rapide personnalisée et lisez plus bas dans la section ' Définition de valeurs existantes ', vous verrez qu'il y a un peu plus travail requis pour le faire.
Je suggérerais de lire la documentation un peu plus en détail car ce n'est pas aussi simple que je le pensais au départ ...