使用DELETE_ATTACHING防止附件无法工作

时间:2018-10-19 作者:Armstrongest

我遇到一个问题,尽管我返回false,但附件仍被删除

function action_maybe_delete( $id ) { 

  echo "Let\'s not delete Attachment id: " . $id ;
  // prevent the attachment from actually being deleted
  if( 1 == 1 ) { // made up condition 
    return false; 
  }
};
// add the action 
add_action( \'delete_attachment\', \'action_maybe_delete\', 10, 1 ); 
当我从媒体库中运行与上述类似的代码时,它会调用admin\\u ajax。php它与mesage相呼应Let\'s not delete Attachmend id: 123 但它仍然会删除媒体库中的文件条目。

它不应该删除文件吗?

我的最终目标是运行一些语句,从Amazon S3容器中删除文件,如果失败,则不删除本地文件(而是告诉用户进程失败)。。。或者类似的东西。

1 个回复
SO网友:phatskat

首先,让我们看看delete_attachment 在堆芯中点火。这是在网上发生的5062 属于wp-includes/post.phpwp_delete_attachment 作用以下是相关片段:

/**
 * Fires before an attachment is deleted, at the start of wp_delete_attachment().
 *
 * @since 2.0.0
 *
 * @param int $post_id Attachment ID.
 */
do_action( \'delete_attachment\', $post_id );

wp_delete_object_term_relationships($post_id, array(\'category\', \'post_tag\'));
wp_delete_object_term_relationships($post_id, get_object_taxonomies($post->post_type));
我们可以看到WordPress core正在调用do_action - 此方法不关心返回的内容;不像apply_filters, do_action 只需触发一个钩子,然后不管返回什么值,处理都将继续。进一步了解wp_delete_attachment, 似乎没有办法“短路”此过程并阻止删除附件。

Except, 从技术上讲,您可以使用PHPdieexit 语句以结束脚本的处理,这将有效防止文件被删除。

function action_maybe_delete( $id ) {
    echo "Let\'s not delete Attachment id: " . $id ;
    // prevent the attachment from actually being deleted
    if( 1 == 1 ) { // made up condition
        die; // Prevent the script from continuing.
    }
};
// add the action
add_action( \'delete_attachment\', \'action_maybe_delete\', 10, 1 ); ?php

结束

相关推荐

theme functions (hooks)

WordPress已经提出了这个问题,但没有答案。我只是想在这个论坛上试试,如果有人知道的话,因为我也有同样的问题。要使用jquery滑块编辑我的主题,如何转到该脚本?,显示“$主题->挂钩(\'content\\u before\');”在content div标记中。有人能帮忙吗?我的主题索引。php包含以下内容<div id=\"main\"> <?php $theme->hook(\'main_before\'); ?> &#x