web-dev-qa-db-ja.com

値が空のときにカスタムフィールドが更新されない

フックattachment_fields_to_editattachment_fields_to_saveを使ってWordPress画像アップローダーにいくつかのカスタムフィールドを追加しました。ユーザーによってフィールドが消去された場合を除き、すべてうまく機能します。たとえば、このフィールドは「油絵」と言っていましたが、ユーザーはこのフィールドを空白にして消去しましたが、このフィールドにはまだ「油絵」と書かれています。テキストを他のものに変更しても問題ありません。なぜこれが起こっているのですか?前もって感謝します

これが私のコードです:

// 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

フィールドが空かどうか確認しています。空の場合も更新しよう

 if( trim( $attachment[ $field ] ) == '' ) $post[ 'errors' ][ $field ][ 'errors' ][] = __( 'Error! Something went wrong.' );
 else update_post_meta( $post[ 'ID' ], $key, $attachment[ $field ] );

やってみる

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