用脚本以编程方式(在管理中)设置特色图像?

时间:2012-06-03 作者:Zach Lysobey

我正在尝试使用javascript从媒体库中的现有图像设置帖子缩略图(特色图像)。我想我也会考虑一个基于php的选项(在图像显示之前需要单击update)。

Some Background

我正在为一个音乐场馆建立一个网站,上面有一个自定义的“事件”帖子类型。大多数情况下,这些活动都是独特的,但也有一些反复出现的想法(例如,大多数周二都是开放话筒之夜)。

我想我想在下拉列表中加入一些“预设”来填充add new event 后端的表单字段。我认为用tinymce和我的自定义元字段来实现这一点很容易。困难的部分是如何将一个(已经上传到媒体库)图像以编程方式放入特色图像框中。

我知道我可以在模板端做一些工作,但如果在add new/edit 看法

谢谢

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

您需要执行一个ajax调用,并执行以下操作:“设置帖子缩略图”

签入管理ajax。php(3.3.2中的第1477行)获取期望值和nonce,但通常需要发送post\\u id、attachment\\u id和nonce。

nonce应该来自:wp\\u create\\u nonce(“set\\u post\\u缩略图-$post\\u id”);

管理员执行以下操作:

 uploader.bind(\'FileUploaded\', function(up, file, response) {
            jQuery.post(ajaxurl, {
                    action:"set-post-thumbnail", post_id: post_id, thumbnail_id: response.response, _ajax_nonce: \'<?php echo $ajax_nonce;?>\' , cookie: encodeURIComponent(document.cookie)
                }, function(str){
                    var win = window.dialogArguments || opener || parent || top;
                    if ( str == \'0\' ) {
                        alert( setPostThumbnailL10n.error );
                    } else {
                         jQuery(\'#postimagediv .inside\').html(str);
                         jQuery(\'#postimagediv .inside #plupload-upload-ui\').hide();

                    }
                }
                );
                jQuery("#postimagediv .inside h2.uploading_message").remove();

        });

SO网友:fdsa

您可以在jquery image combobox, 让用户单击“更新”,然后使用set_post_meta or update_post_meta 将图像放到帖子中。

如果不想添加额外按钮,可以使用此问题的解决方案save the meta data for your custom post type.

SO网友:Albin Joseph

我认为update\\u post\\u元功能将使附件具有特色。

update_post_meta($post_id, \'_thumbnail_id\', $attachment_id);

SO网友:eklingen

这个解决方案在提出这个问题时并不存在,但由于我是在这里寻求答案的,我想这可能会帮助其他人。

我不确定如何捕获上载事件,因为我正在使用CMB2的事件cmb_media_modal_select, 但设置特色图像非常简单:

wp.media.featuredImage.set(id)
有关JS API这一部分的更多信息here.

对于我来说,对于CMB2,我使用的是以下内容:

$( document ).on( \'cmb_media_modal_select\', function ( e, selection, media ) {
    let currentMediaId = wp.media.featuredImage.get();

    if( currentMediaId === -1 ) {
        let newMediaId = selection.models[ 0 ].id;
        console.log( newMediaId );
        wp.media.featuredImage.set( newMediaId );
    }
} );
希望这对别人有帮助!

结束