根据附件的自定义字段数据设置附件标签

时间:2012-05-05 作者:Matt Scheurich

我当前在附件的表单中添加了一个自定义字段,名为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_creditmedia_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);

1 个回复
最合适的回答,由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;
}

结束

相关推荐

Conditionals if tags exist?

我有以下代码来显示与页面标题同名的标记文章,但我只想在标记存在时显示,否则它只会显示没有内容的“相关文章”。我尝试过使用一些条件句,但没有成功。有没有办法做到这一点?我在这里没有发现任何与此相关的示例或问题。<h1>Related Articles</h1> <?php query_posts( \'tag=\' . get_the_title() . \'\' ); while ( have_posts() ) : the_post(); ?>