我有一个工作功能,可以在所有附件中添加一个元字段(这样我就可以输入视频的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 );
最合适的回答,由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;
}