将自定义域添加到特定类别的附件

时间:2016-05-27 作者:BlueHelmet

我有一个工作功能,可以在所有附件中添加一个元字段(这样我就可以输入视频的url)。我希望此字段仅填充“视频”类别中的附件。

我尝试了以下方法,添加in_category(\'video\') 但那没用。该字段仍显示在所有附件上。

function attachment_field_url( $form_fields, $post ) {

        $form_fields[\'video-url\'] = array(
        \'label\' => \'Video URL\',
        \'input\' => \'text\',
        \'value\' => get_post_meta( $post->ID, \'video_url\', true ),
        \'helps\' => \'Add video URL\',
    );

    return $form_fields;
}

add_filter( \'attachment_fields_to_edit\', \'attachment_field_url\', 10, 2 );

function attachment_field_url_save( $post, $attachment ) {

    if( in_category(\'video\')  && !isset ($attachment[\'video-url\'] ) )
update_post_meta( $post[\'ID\'], \'video_url\', esc_url( $attachment[\'video-url\'] ) );                             
    return $post;
}

add_filter( \'attachment_fields_to_save\', \'attachment_field_url_save\', 10, 2 );

1 个回复
最合适的回答,由SO网友:TheDeadMedic 整理而成

in_category 依赖于全局post-它应该只在循环中使用。相反,使用传递给回调的参数来查询分配给正在编辑的帖子的类别,并检查其中是否有video:

$cats = get_the_category( $post[\'ID\'] );
if ( in_array( \'video\', wp_list_pluck( $cats, \'slug\' ) ) {
    // In "video" category
}
。。。现在总共:

function attachment_field_url_save( $post, $attachment ) {
    if ( isset( $attachment[\'video-url\'] ) ) {
        $cats = get_the_category( $post[\'ID\'] );

        if ( in_array( \'video\', wp_list_pluck( $cats, \'slug\' ) ) {
            update_post_meta( $post[\'ID\'], \'video_url\', esc_url( $attachment[\'video-url\'] ) );  
        }
    }

    return $post;
}