定义EMPTY_TRASH_DAYS常量为0后,WordPress 3.3 无法删除附件的BUG » 荒野无灯weblog

Keep It Simple, Stupid.

荒野无灯weblog

定义EMPTY_TRASH_DAYS常量为0后,WordPress 3.3 无法删除附件的BUG

在wp-config.php中,定義

define('EMPTY_TRASH_DAYS', 0 );

(这条语句可以禁用回收站)之後,在日誌編輯頁面無法正常刪除附件。

為確保沒有其它因素影响操作结果,我禁用了所有的插件,并且,使用的是官方的twentyten主题。


ps:

I have tried this on both Linux and Windows server.
WordPress version 3.3
PHP version 5.3.6
mysql version 5.5.11

the thread:
http://wordpress.org/support/topic/bugwordpress-33-can-not-delete-attachment-in-thickbox-popup-media-window


刪除附件:

刪除失敗:

另外,这时,在“媒体库”删除文件是可以正常删除的。

如果注释掉

define('EMPTY_TRASH_DAYS', 0 );

则在日志页面可以正常删除附件,这种情况下它会问你是否继续,点那个“继续”就能彻底删除附件了。

调试发现:

存在

define('EMPTY_TRASH_DAYS', 0 );

时:

Request URL:wp-admin/admin-ajax.php
Request Method:POST
Status Code:200 OK

Form Data:
id:300
action:trash-post
_ajax_nonce:8583b8742b

如果不定义禁用回收站,则:

Request URL: wp-admin/post.php?action=delete&post=300&_wpnonce=8583b8742b
Request Method:GET

Query String Parameters
action:delete
post:300
_wpnonce:8583b8742b

解决办法:
观察其生成的链接:
[cc lang="html"]
Delete Permanently

再看 handlers.js,不难发现是其action参数错误,原本应该是delete的,却搞成了trash-post,所以就出错了。。。 :arrow:

wp-includes/js/swfupload/handlers.dev.js(106)
wp-includes/js/plupload/handlers.dev.js(146)

    // Bind AJAX to the new Delete button
    jQuery('a.delete', item).click(function(){
        // Tell the server to delete it. TODO: handle exceptions
        jQuery.ajax({
            url: 'admin-ajax.php',
            type: 'post',
            success: deleteSuccess,
            error: deleteError,
            id: fileObj.id,
            data: {
                id : this.id.replace(/[^0-9]/g, ''),
                action : 'trash-post',
                _ajax_nonce : this.href.replace(/^.*wpnonce=/,'')
            }
        });
        return false;
    });

    // Bind AJAX to the new Undo button
    jQuery('a.undo', item).click(function(){
        // Tell the server to untrash it. TODO: handle exceptions
        jQuery.ajax({
            url: 'admin-ajax.php',
            type: 'post',
            id: fileObj.id,
            data: {
                id : this.id.replace(/[^0-9]/g,''),
                action: 'untrash-post',
                _ajax_nonce: this.href.replace(/^.*wpnonce=/,'')
            },
            success: function(data, textStatus){
                var item = jQuery('#media-item-' + fileObj.id);

                if ( type = jQuery('#type-of-' + fileObj.id).val() )
                    jQuery('#' + type + '-counter').text(jQuery('#' + type + '-counter').text()-0+1);
                if ( item.hasClass('child-of-'+post_id) )
                    jQuery('#attachments-count').text(jQuery('#attachments-count').text()-0+1);

                jQuery('.filename .trashnotice', item).remove();
                jQuery('.filename .title', item).css('font-weight','normal');
                jQuery('a.undo', item).addClass('hidden');
                jQuery('a.describe-toggle-on, .menu_order_input', item).show();
                item.css( {backgroundColor:'#ceb'} ).animate( {backgroundColor: '#fff'}, { queue: false, duration: 500, complete: function(){ jQuery(this).css({backgroundColor:''}); } }).removeClass('undo');
            }
        });
        return false;
    });

试着把那个

 action : 'trash-post',

中的trash-post修改为 delete-post,还是一样的结果。。。 :arrow:

Tagged in : wp问题

All Comments (0)
Gravatar image
No Comments