自定义下拉字段已添加到媒体集;如何正确保存它?

时间:2015-10-14 作者:Haroon Q. Raja

我正在使用以下代码向媒体附件添加几个自定义字段:

//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显示模板中需要的任何数据。

在这一点上我完全迷失了方向,但我知道我真的非常接近,我一直在努力让这一点发挥作用,几个月过去了,直到我完全沮丧的时候。在此方面的任何帮助都将不胜感激。

1 个回复
SO网友:Mariano Schmands

我认为您需要更改select字段中id的值

$output = "<select name=\'attachments[{$id}][kgal_artwork_artist]\' id=\'attachments-\'.$id.\'-kgal_artwork_artist\'>";

相关推荐

使用自定义上载文件夹的Media_Handle_Upload?

我为阿凡达建立了一个自定义图像上传程序,我真的很喜欢media_handle_upload() 创建不同大小的图像。因为它们是化身,而不是帖子的数据,我不希望它们被放在默认的WordPress上传文件夹中。是否可以继续使用media_handle_upload() 同时定义自定义上载文件夹?