我正在使用以下代码向媒体附件添加几个自定义字段:
//Add custom fields for attachments
function kgal_add_custom_fields_to_artwork( $form_fields, $post ) {
$form_fields[\'kgal_artwork_artist\'] = array(
\'label\' => \'Artist\',
\'input\' => \'html\',
\'html\' => get_artists_dropdown( $post->ID ),
\'application\' => \'image\',
\'exclusions\' => array( \'audio\', \'video\' ),
);
$form_fields[\'kgal_artwork_medium\'] = array(
\'label\' => \'Medium\',
\'input\' => \'text\',
\'value\' => get_post_meta( $post->ID, \'kgal_artwork_medium\', true ),
\'application\' => \'image\',
\'exclusions\' => array( \'audio\', \'video\' ),
);
return $form_fields;
}
add_filter( \'attachment_fields_to_edit\', \'kgal_add_custom_fields_to_artwork\', 10, 2 );
function kgal_save_custom_fields_for_artwork( $post, $attachment ) {
if( isset( $attachment[\'kgal_artwork_artist\'] ) )
update_post_meta( $post[\'ID\'], \'kgal_artwork_artist\', $attachment[\'kgal_artwork_artist\'] );
if( isset( $attachment[\'kgal_artwork_medium\'] ) )
update_post_meta( $post[\'ID\'], \'kgal_artwork_medium\', $attachment[\'kgal_artwork_medium\'] );
return $post;
}
add_filter( \'attachment_fields_to_save\', \'kgal_save_custom_fields_for_artwork\', 10, 2 );
// output artists dropdown
function get_artists_dropdown( $id ) {
if( !$id )
return;
$artists = get_posts(
array(
\'post_type\' => \'artist\',
\'posts_per_page\' => -1,
\'post_status\' => \'publish\',
)
);
if( !$artists )
return;
$output = "<select name=\'attachments[{$id}][kgal_artwork_artist]\' id=\'attachments[{$id}][kgal_artwork_artist]\'>";
foreach( $artists as $artist )
$output .= \'<option \' . selected( get_post_meta( $id, "kgal_artwork_artist", true ), $artist->post_id, false ) . \' value="\' . $artist->post_id . \'">\' . $artist->post_title . \'</option>\';
$output .= \'</select>\';
return $output;
}
现在,当我去媒体库编辑图像时,文本字段(即kgal\\u artwork\\u medium)会很好地更新,即保存的gif会旋转,在导航到另一个图像并返回到我刚刚编辑的图像后,我会在那里看到正确的值。我还在附件页面模板中显示了该字段,它在前端显示得很好。
然而,当涉及到html字段(即kgal\\u artwork\\u Artister)时,事情会变得一团糟。下拉列表显示得很好,按名称填充了所有艺术家,当我从中选择艺术家时,保存的gif也会旋转得很好,但实际数据似乎没有保存,当导航到另一幅图像并返回时,下拉列表总是恢复到显示列表中的最后一位艺术家。此外,附件页面的前端没有显示艺术家的任何内容。
我的selected()函数可能有一些问题,我在这里遗漏了,或者我没有保存正确的值。。。下拉列表需要显示艺术家的姓名,但保存其ID,以便我可以利用ID显示模板中需要的任何数据。
在这一点上我完全迷失了方向,但我知道我真的非常接近,我一直在努力让这一点发挥作用,几个月过去了,直到我完全沮丧的时候。在此方面的任何帮助都将不胜感激。