媒体上传器和管理器:使用复选框在图像上添加/删除类

时间:2013-09-23 作者:Gabriel Luethje

这看起来应该相当简单,但我对此一无所知:

在媒体上传器和媒体管理器中有一个复选框,选中该复选框后,会将CSS类名添加到图像中。应该保持检查。

关键是我不能使用post meta来存储选中或未选中的状态。说来话长,但基本上我正在从事的项目的要求是,在图像上设置全局元键/值是不合适的。

我想出了如何添加复选框并使用它设置/取消设置post meta:

/**
 * Add a checkbox to media uploader & manager to mark an image as a Profile Image
 *
 */

function my_select_profile_image( $form_fields, $post ) {
   $is_profile_image = (bool) get_post_meta($post->ID, \'_is_profile_image\', true);
   $checked = ($is_profile_image) ? \'checked\' : \'\';

    $form_fields[\'is_profile_image\'] = array(
    \'label\' => \'Profile Image?\',
    \'input\' => \'html\',
    \'html\' => "<input type=\'checkbox\' name=\'attachments[{$post->ID}][is_profile_image]\' id=\'attachments[{$post->ID}][is_profile_image]\' {$checked} />",
   \'value\' => $is_profile_image,
    \'helps\' => \'Checking this box will add profile image styling to the image & caption.\'
    );
return $form_fields;
}
add_filter( \'attachment_fields_to_edit\', \'my_select_profile_image\', null, 2 );

/**
 * Update image meta based on Profile Image checkbox status
 *
 *
 */
function my_save_profile_image($post, $attachment) {
    if( isset( $attachment[\'is_profile_image\'] ) )
        update_post_meta( $post[\'ID\'], \'_is_profile_image\', true );

    if( !isset( $attachment[\'is_profile_image\'] ) )
        update_post_meta( $post[\'ID\'], \'_is_profile_image\', false );
    return $post;
}
add_filter( \'attachment_fields_to_save\', \'my_save_profile_image\', null, 2 )
但随着post meta的退出,我对如何做到这一点感到困惑。

1 个回复
SO网友:brasofilo

鉴于此

我不能使用post meta

我想这是一个拼写错误(我的重点)

setting a global 图像上的元键/值is not OK

它要么是一个帖子元,要么是一个站点选项
要将其用作站点选项,请在中使用此选项attachments_fields_to_edit:

$is_profile_image = get_option( \'_is_profile_image\' );
$checked = isset( $is_profile_image[ $post->ID ] ) ? \'checked\' : \'\';
还有这个attachment_fields_to_save:

function my_save_profile_image($post, $attachment) 
{
    $is_profile_image = get_option( \'_is_profile_image\' );
    if( isset( $attachment[\'is_profile_image\'] ) )
        $is_profile_image[ $post[\'ID\'] ] = true;
    else 
        unset( $is_profile_image[ $post[\'ID\'] ] );

    update_option( \'_is_profile_image\', $is_profile_image );
    return $post;
}
站点选项_is_profile_image 将是如下所示的数组:

array (size=2)
  96 => boolean true
  97 => boolean true

结束