フックattachment_fields_to_edit
とattachment_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>';
}
}
フィールドが空かどうか確認しています。空の場合も更新しよう
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 ] );
}