当jQuery与删除链接上的单击事件一起使用时,如何删除帖子附件

时间:2011-01-30 作者:jaredwilli

我认为我所需要做的事情是正确的,至少是因为我做了可以做到的事情之一。虽然我不太确定,但据我所知,我可能会偏离正轨。

这是昨晚我需要帮助调整上传图像文件大小的代码的一部分,但现在我正试图找出如何使用wp\\u delete\\u attachment($id)功能删除附在帖子上的图像。

因此,我有一个jQuery脚本,它可以添加/删除额外的字段,用于上传更多要附加的图像。对于每个添加的图像,都有一个删除它们的链接。单击“删除”只会删除所单击的链接所包含的div,保存帖子时,附加文件将显示为仍然附加。

在remove链接的click事件处理程序中,我需要首先运行调用wp\\u delete\\u attachment()的函数,以永久删除文件/附件,然后我可以使用jQuery从页面中删除该附件的div。这样,当保存帖子时,它将被删除,不再显示。

以下是我一直尝试使用的函数:

// a function that returns the delete attachment php function, 
// and a message saying Deleted that fades in and out.
    jQuery(function() {
        function delete_att( attID ) {
            var div = jQuery(\'#img_uploads\'),
                msg = $(\'div\').html(\'<strong>Attachment Deleted!</strong>\').fadeIn().delay(200).fadeOut().appendTo(\'div\');
            return \'<?php wp_delete_attachment( \' + attID + \', true ); ?>\', msg;
        }
调用此函数并从页面中删除包含div元素的单击处理程序是:

    jQuery(\'.remImage\').live(\'click\', function() { 
        if( size > 1 ) {
            var postID = jQuery(\'#attID\').val()
            delete_att( postID );

            //jQuery(this).parents(\'.attchmt\').find(\'#attID\');
            jQuery(this).parents(\'.attchmt\').detach();
            size--;
        } 
        return false; 
    });
});
添加额外字段的代码位于这两部分之间,但这些是我需要帮助的关键部分。目前,按照我在这里的编码方式,我收到了这个错误消息。idk wtf这意味着尽管lol。

Error: uncaught exception: [Exception... "Node cannot be inserted at the specified point in the hierarchy"  code: "3" nsresult: "0x80530003 (NS_ERROR_DOM_HIERARCHY_REQUEST_ERR)"  location: "http://code.jquery.com/jquery-1.4.4.min.js Line: 113"]
这就是我正在使用的完整代码。https://gist.github.com/802465只是尝试向jQuery和Php传递信息,这对我来说总是很痛苦。

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

我终于想出了怎么做,现在它100%起作用了!!

此外,它还使用了管理ajax。因此,单击Remove链接,会向函数发送一个ajax请求,该函数会删除附件,并返回消息,说明附件已被删除。

以下是我的解决方案的代码,首先是metabox的html:

<a class="remImage" href="#"><?php _e(\'Remove\');?></a>                  
<input type="hidden" id="att_remove" name="att_remove[]" value="<?php echo $attachment->ID; ?>" />
<input type="hidden" name="nonce" id="nonce" value="<?php echo wp_create_nonce( \'delete_attachment\' ); ?>" />
下面是Php函数:

add_action( \'wp_ajax_delete_attachment\', \'delete_attachment\' );
function delete_attachment( $post ) {
    //echo $_POST[\'att_ID\'];
    $msg = \'Attachment ID [\' . $_POST[\'att_ID\'] . \'] has been deleted!\';
    if( wp_delete_attachment( $_POST[\'att_ID\'], true )) {
        echo $msg;
    }
    die();
}
发送附件ID和操作等,然后在收到ajax响应后从DOM中删除div的jQuery脚本是:

    jQuery(\'.remImage\').live(\'click\', function() {
        if( size > 1 ) {
            jQuery.ajax({
                type: \'post\',
                url: ajaxurl,
                data: {
                    action: \'delete_attachment\',
                    att_ID: jQuery(this).parents(\'.attchmt\').find(\'#att_remove\').val(),
                    _ajax_nonce: jQuery(\'#nonce\').val(),
                    post_type: \'attachment\'
                },
                success: function( html ) {
                    alert( html );
                }
            });
            jQuery(this).parents(\'.attchmt\').detach();
            size--;
        }
        return false;
    });
我现在终于可以完成我认为完全不可能的事情了,在我尝试了很多次之后,每次都失败了。

它很快就会成为一个插件,我可以在任何网站上轻松使用,并提供简单的选项来定义要添加到的帖子类型。

SO网友:Bainternet

看起来您正试图直接从JQuery中调用WordPress函数,这样就行不通了。您可以使用您的函数隐藏div,但在该操作中,为要删除的每个附件添加一个隐藏字段,作为一个具有附件id的数组,如下所示:

<input type="hidden" name="att_remove[]" value="attachment_ID">
然后在save\\u post hook中添加一个删除这些文件的函数,如下所示:

function remove_custom_att_1212(){
   global $post;
   if ($post->post_type =="your custom post type"){
      if (isset($_POST[\'att_remove\']){
         foreach ($_POST[\'att_remove\'] as $att_id){
           delete_att($att_id);
         }
      }
   }
}
add_action(\'save_post\',\'remove_custom_att_1212\');

结束

相关推荐

need jquery help

我有一个表格,每个帖子后都会显示出来,所以我把它编码成了一个。php,但表单太长了,所以我想把它放在jquery部分,如果用户需要,可以单击open,表单将向下滑动。为此,我使用了向上/向下滑动jquery http://api。jquery。com/向下滑动/我在标题中以适当的顺序集成了jquery。php,这是我的标题。php jquery代码<?php wp_enqueue_script(\"jquery\"); ?> <?php wp_head(); ?>