我当前在附件的表单中添加了一个自定义字段,名为artist_credit
使用挂钩attachment_fields_to_edit
. 当一个人在艺术家信用字段中输入一个名字时,我希望它(如果它还没有标签)在保存附件时为附件的标签分配一个具有该名字的标签。
我有插件Wordpress Media Tags 已安装,允许我在附件表单上有一个字段,用于将条款附加到media_tag
分类学我发现的问题是当我用钩子的时候attachment_fields_to_save
. 保存的元数据artist_credit
很好(使用update_post_meta
), 只是当我使用wp_set_object_terms
然后添加artist_credit
到media_tag
分类法,它确实分配了它(标记是在我回显时分配的get_the_terms
对于附件帖子),但当我再次转到附件的编辑表单查看结果时,额外的信用标签根本没有分配给附件帖子。
我唯一的理论是media_tag
分类法值在attachment_fields_to_save
这是可以理解的false
值不附加术语。有趣的是,钩子save_post
在编辑附件的详细信息后未被激发,因此我似乎无法使用该挂钩添加此artist_credit
对的值media_tag
此附件帖子的分类。对我能做什么有什么建议吗?
以下是我目前的做法:
// Add custom fields to attachments
function example_add_attachment_fields($form_fields, $post) {
// Create artist_credit custom field
$form_fields[\'artist_credit\'] = array(
\'label\' => \'Artist Credit\',
\'input\' => \'text\',
);
return $form_fields;
}
add_filter(\'attachment_fields_to_edit\', \'example_add_attachment_fields\', null, 2);
// Save attachment\'s custom fields\' values
function example_save_attachment_fields($post, $attachment) {
// Save extra attachment fields
if ( isset($attachment[\'artist_credit\']) ) {
update_post_meta($post[\'ID\'], \'artist_credit\', $attachment[\'artist_credit\']);
// Add artist_credit as a term to the attachment post
wp_set_object_terms( $post[\'ID\'], $attachment[\'artist_credit\'], \'media_tag\', true );
}
return $post;
}
add_filter(\'attachment_fields_to_save\', \'example_save_attachment_fields\', null, 2);
最合适的回答,由SO网友:brasofilo 整理而成
我设法做到了,但没有完全做到。
首先,您提供的代码没有检索已保存的post\\u meta。
我的代码基于本教程的介绍性代码:
http://wpengineer.com/2076/add-custom-field-attachment-in-wordpress/
我使用常规的post\\u标记分类法,而不是自定义分类法。
最后,还有一个bug,当您关闭Media Upload iframe并点击“Update”后,标签会被删除(不知道为什么),但如果您只是刷新浏览器,标签就会出现。
无论如何,有一条可能有助于给出完整的答案:
-intval($post[\'ancestors\'][0]
) 在函数中wp_set_post_terms
add_filter( \'attachment_fields_to_edit\', \'fb_attachment_fields_edit\', 10, 2);
add_filter( \'attachment_fields_to_save\', \'fb_attachment_fields_save\', 10, 2);
function fb_attachment_fields_edit($form_fields, $post) {
$form_fields[\'artist_credit\'][\'label\'] = __( \'Example Custom Field\', \'\' );
$form_fields[\'artist_credit\'][\'value\'] = get_post_meta($post->ID, \'artist_credit\', true);
$form_fields[\'artist_credit\'][\'helps\'] = __( \'A helpful text for this field.\', \'\' );
return $form_fields;
}
// save custom field to post_meta
function fb_attachment_fields_save($post, $attachment) {
if ( isset($attachment[\'artist_credit\']) && \'\' !== $attachment[\'artist_credit\'] ) {
update_post_meta($post[\'ID\'], \'artist_credit\', $attachment[\'artist_credit\']);
$check = wp_set_post_terms( intval($post[\'ancestors\'][0]), $attachment[\'artist_credit\'], \'post_tag\', true );
}
return $post;
}