使用jQuery UI自动完成时,媒体附件自定义元字段未保存在Media Uploader中

时间:2014-02-04 作者:mneil

我正在尝试编写一个插件,在图像附件中添加一个自定义元字段,为图像提供一个信用字段。我使用“attachment\\u fields\\u to\\u edit”和“attachment\\u fields\\u to\\u save”过滤器。

function hrld_attachment_field_credit( $form_fields, $post ) {
 $value = get_post_meta( $post->ID, \'_hrld_media_credit\', true );
 $form_fields[\'hrld_media_credit\'][\'label\'] = \'Media Credit\';
 $form_fields[\'hrld_media_credit\'][\'input\'] = \'html\';
 $form_fields[\'hrld_media_credit\'][\'html\'] = \'<input type="text" class="text hrld_media_credit_input" id="attachments-\'.$post->ID.\'-hrld_media_credit" name="attachments[\'.$post->ID.\'][hrld_media_credit]" value="\'.$value.\'">\';
 $form_fields[\'hrld_media_credit\'][\'helps\'] = \'If photo was taken by a Herald photographer, use their username. e.g. "Bucky Badger" You should write "bbadger".\';

return $form_fields;
}

add_filter( \'attachment_fields_to_edit\', \'hrld_attachment_field_credit\', 10, 2 );
上面添加了输入字段。

function hrld_attachment_field_credit_save( $post, $attachment ) {
if( isset( $attachment[\'hrld_media_credit\'] ) )
    update_post_meta( $post[\'ID\'], \'_hrld_media_credit\', $attachment[\'hrld_media_credit\'] );

return $post;
}

add_filter( \'attachment_fields_to_save\', \'hrld_attachment_field_credit_save\', 10, 2 );
以上触发保存元数据。

编辑帖子时会出现问题,单击“添加媒体”按钮添加图像。当在此媒体上传器框架内更改图像上的元数据(如标题或alt text)时,wordpress将在文本字段失去焦点时自动保存数据。我的元数据也同样保存,没有问题。我在“image\\u send\\u to\\u editor”中添加了一个过滤器,以便在有信用数据的情况下自动在标题标记中添加信用字段。

function hrld_media_credit_send_editor($html, $id, $caption, $title, $align, $url, $size){
    $html = get_image_tag($id, \'\', $title, $align, $size);
    $hrld_credit = get_hrld_media_credit($id);
    if(isset($hrld_credit) && !empty($hrld_credit)){
        if(get_user_by(\'login\', $hrld_credit)){
            $hrld_user = get_user_by(\'login\', $hrld_credit);
            $html_text = \'<span class="hrld-media-credit">Photo by \'.$hrld_user->display_name.\'.</span>\';
        } else{
            $html_text = \'<span class="hrld-media-credit">\'.$hrld_credit.\'.</span>\';
        }
        if($caption){
            $html = get_image_tag($id, \'\', $title, $align, $size);
            $html .= $html_text;
        } else{
            $attach_attributes = wp_get_attachment_image_src($id, $isze);
            $html = \'[caption id="attachment_\'.$id.\'" align="\'.$align.\'" width="\'.$attach_attributes[1].\'"]\';
            $html .= get_image_tag($id, \'\', $title, $align, $size);
            $html .= $html_text;
            $html .= \'[/caption]\';
        }
    }
return  $html;
}
add_filter( \'image_send_to_editor\', \'hrld_media_credit_send_editor\', 10, 7 );
到目前为止,事情还是如预期的那样顺利。我想要的功能是使用jQuery UI Autocomplete根据用户类型建议用户登录,但我想保持输入字段为自由文本,因为图像信用不必是wordpress中的用户。我使用这个javascript向每个字段添加自动完成功能。

jQuery("body").on("keydown", ".hrld_media_credit_input", function(){
var hrld_media_input = jQuery(this);
hrld_media_input.autocomplete({
    source: hrld_user_tags,
    select: function (event, ui) {
        console.log(hrld_media_input);
        hrld_media_input.attr("value", ui.item.value);
    }  
});
});
我使用的原因。on()是指当使用“添加媒体”按钮时,它会动态创建输入字段,因此不需要。在()上,它将只在页面加载时应用自动完成,而这些输入字段还不存在。(我省略了一些将此脚本排队的php代码,并创建了hrld\\u user\\u tags变量,它只是一个用户名数组)。

现在,当使用autocomplete选择建议的用户名时,单击该名称填充字段,wordpress将不会自动保存该元数据。如果我点击插入帖子,它将不会被放入标题标签中,就像我从未输入用户名一样。但是,如果我在字段中键入并看到“示例”是一个建议,如果我没有单击该建议来自动完成该字段,而是手动键入“示例”,然后按“插入到帖子”,则会保存元数据“示例”,并将其插入到标题标记中。

我已经搜索了几个小时来寻找这个问题的答案,查看了wp includes和wp admin核心文件,试图找到应用过滤器或添加操作以触发保存我的数据的函数,但无法解决这个问题。

对此问题的任何帮助或见解都将不胜感激。

1 个回复
SO网友:pepe

您必须在您的字段上触发更改事件,即。hrld_media_input.attr("value", ui.item.value).change();. 这将确保触发attachment\\u fields\\u to\\u save。

结束

相关推荐

Image media upload metabox

我已经创建了第一个图像上载元数据库,但似乎有问题。当我添加图像然后更新页面时,数据不会保存-我确信这是我自己的错别字,我看不到。第二个输入框的上载图像按钮无法像第一个一样加载媒体库框-Js可能会出现问题吗?这是我的代码<?php /* Plugin Name: Meta Box Media Library Image Plugin URI: Description: Adds the ability to select an image from the