web-dev-qa-db-fra.com

Le champ personnalisé n'est pas à jour quand la valeur est vide

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>';
    }
}
1
laras126

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 ] );
        } 
1
chifliiiii