J'ai ajouté quelques champs personnalisés à l'utilitaire de téléchargement d'images WordPress à l'aide des crochets attachment_fields_to_edit
et attachment_fields_to_save
. Tout fonctionne très bien, sauf lorsqu'un champ est effacé par l'utilisateur. Par exemple, le champ disait "Peinture à l'huile" et l'utilisateur l'a effacé, souhaitant que le champ soit vide - mais le champ indique toujours "Peinture à l'huile". Changer le texte en quelque chose d'autre fonctionne bien cependant. Des idées pourquoi cela se produit? Merci d'avance
Voici mon code:
// Add custom fields to the media uploader
function wpf_fields_edit( $form_fields, $post ) {
$post->post_type == 'attachment';
$form_fields[ 'wpf_g_medium' ] = array(
'label' => __( 'Medium' ),
'input' => 'text',
'value' => get_post_meta( $post->ID, '_wpf_g_medium', true )
);
$form_fields[ 'wpf_g_medium' ][ 'label' ] = __( 'Medium' );
$form_fields[ 'wpf_g_medium' ][ 'input' ] = 'text';
$form_fields[ 'wpf_g_medium' ][ 'value' ] = get_post_meta( $post->ID, '_wpf_g_medium', true );
// A couple more fields are added here, using the same code
return $form_fields;
}
add_filter( 'attachment_fields_to_edit', 'wpf_fields_edit', NULL, 2 );
// Save the fields' data
function wpf_fields_save( $post, $attachment ) {
$fields = array('wpf_g_medium', 'wpf_g_dimen', 'wpf_g_collabs');
foreach( $fields as $field ) {
$key = '_' . $field;
if( isset( $attachment[ $field ] ) ) {
if( trim( $attachment[ $field ] ) == '' ) $post[ 'errors' ][ $field ][ 'errors' ][] = __( 'Error! Something went wrong.' );
else update_post_meta( $post[ 'ID' ], $key, $attachment[ $field ] );
}
}
return $post;
}
add_filter( 'attachment_fields_to_save', 'wpf_fields_save', NULL, 2 );
// Print the values, called in attachment.php
function get_artwork_fields_info() {
global $post;
$fields = array('wpf_g_medium', 'wpf_g_dimen', 'wpf_g_collabs');
$title = $post->post_title;
if( $fields ) {
echo '<ul id="artwork-meta"><li><em>' . $title . '</em></li>';
foreach ( $fields as $field ) {
$key = '_' . $field;
$meta = get_post_meta( $post->ID, $key, true );
if ( $meta ) {
echo '<li>';
echo $meta;
echo '</li>';
}
}
echo '</ul>';
}
}
Vous vérifiez si le champ est vide. Essayez de le mettre à jour s'il est également vide
if( trim( $attachment[ $field ] ) == '' ) $post[ 'errors' ][ $field ][ 'errors' ][] = __( 'Error! Something went wrong.' );
else update_post_meta( $post[ 'ID' ], $key, $attachment[ $field ] );
Essayer
if( isset( $attachment[ $field ] ) ) {
if( trim( $attachment[ $field ] ) == '' )
$post[ 'errors' ][ $field ][ 'errors' ][] = __( 'Error! Something went wrong.' );
endif;
update_post_meta( $post[ 'ID' ], $key, $attachment[ $field ] );
}