在wp-admin(客户端)中编辑帖子时检测特色图片删除

时间:2015-12-24 作者:Jordan Foreman

我想在wp admin的后期编辑屏幕中添加一些客户端(JavaScript)事件(post.php?action=edit). 我希望在用户选择新的特色图像时触发事件,在用户删除特色图像时触发其他事件。

到目前为止我能找到this wordpress.se answer, 这使我能够挂接到“on featured image set”事件中,但我不知道如何挂接到与客户端相关的“on featured image removed”事件中。

我已经深入研究了wp.media.featuredImage.frame().states._events 有点使用Chrome的WebInspector,但似乎没有一个注册的事件与我正在寻找的完全匹配。。。

wp.media.featuredImage.frame().states._events

作为一个潜在的候选人,唯一一个冲我发火的是content:render:edit-image 事件,但它不会在我试图收听的任何一个事件中触发!

有人知道这样做的方法吗?

2 个回复
最合适的回答,由SO网友:Jordan Foreman 整理而成

所以我能够实现我想要的,尽管有点迂回。我将在这里分享我的解决方案,以防有人无意中发现这篇文章,想要做类似的事情。

而不是将事件侦听器添加到wp.media.featuredImage.frame(), 相反,我将自己的onclick事件侦听器添加到#remove-post-thumbnail 链接元素。这让我感觉有点不舒服,因为它不直接与特征图像的未设置相关联,但是由于没有验证删除的提示,用户交互相当不明显。

然而,这个解决方案有一个警告-已经有一个onclick 事件绑定到该链接,因此您需要避免覆盖该链接,否则您将无法实际删除特色图像。最初,我尝试捕获默认onclick事件,然后从覆盖它的事件中调用它,如下所示:

DO NOT DO THIS

var ogCallback = document.getElementById(\'remove-post-thumbnail\').onclick;
document.getElementById(\'remove-post-thumbnail\').onclick = function(e) {
    // My code - do some things
    // ...
    ogCallback(e);
}
但这使得WordPress在删除特色图片时出现了一些小问题,可能是因为我没有考虑到一些JavaScript范围。因为我也在利用jQuery(这是一个没有判断的区域,对吧?)我可以改用jQuery的事件绑定系统,并避免覆盖默认行为,允许我的自定义代码与WordPress的特色图像删除逻辑一起运行:

DO THIS

$(document).on(\'click\', \'#remove-post-thumbnail\', function(){
    // Do stuff. Don\'t let your dreams be dreams
});

SO网友:Léo Muniz

乔丹·福尔曼(JordanForeman)的上述解决方案是有道理的,我第一次尝试了完全相同的方法,但对我无效。

事实上,在WordPress上media-editor.js 核心文件有一个return false#remove-post-thumbnail 单击我认为在document 单击,可能会阻止它被触发。

$(\'#postimagediv\').on( \'click\', \'#set-post-thumbnail\', function( event ) {
    event.preventDefault();
    // Stop propagation to prevent thickbox from activating.
    event.stopPropagation();

    wp.media.featuredImage.frame().open();
}).on( \'click\', \'#remove-post-thumbnail\', function() {
    wp.media.featuredImage.remove();
    return false; // this line cancels the click and prevents other click events.
});
因此,为了在删除特色图像时触发事件,我将click事件直接附加到#postimagediv (特色图像元框本身)并起作用。

$( \'#postimagediv\' ).on(\'click\', \'#remove-post-thumbnail\', function(){
    // Do stuff. Don\'t let your dreams be dreams
});

相关推荐

400错误请求-JavaScript应用程序调用自定义wp-json终结点

我已成功创建了新的端点/路由,可以通过wp-json. 不仅如此,我还可以使用Restlet客户端从浏览器外部成功地向该端点发出post请求。我的端点句柄json 在请求主体内,转换和编辑数据,然后进行外部api调用,然后从外部api将新数据发送回客户端。然而,当我在wordpress站点上运行调用此api的应用程序时,我得到400 Bad Request. 我处理函数中许多地方的错误,并根据数据中可能出现的错误类型发回特定的错误消息,但我似乎找不到这些错误的来源。我已设置WP_DEBUG 到true,