【问题标题】:Removing Content with wp_delete_post in a Plugin with Custom Post Type在具有自定义帖子类型的插件中使用 wp_delete_post 删除内容
【发布时间】:2013-02-14 19:30:31
【问题描述】:

我设置了一个插件来添加自定义帖子类型,然后在激活时使用 wp_insert_post 引入一堆虚拟内容,如下所示:

    register_activation_hook( __FILE__, array( $this, 'activate' ) );
public function activate( $network_wide ) {
        include 'dummycontent.php';
        foreach ($add_posts_array as $post){
        wp_insert_post( $post );
    };
} // end activate

我想在插件停用时删除此内容,因此我设置了此功能:

    register_deactivation_hook( __FILE__, array( $this, 'deactivate' ) );
   public function deactivate( $network_wide ) {
        include 'dummycontent.php';
    foreach($remove_posts_array as $array){
        $page_name = $array["post_title"];
        global $wpdb;
        $page_name_id = $wpdb->get_results("SELECT ID FROM " . $wpdb->base_prefix . "posts WHERE post_title = '". $page_name ."'");
        foreach($page_name_id as $page_name_id){
            $page_name_id = $page_name_id->ID;
            wp_delete_post( $page_name_id, true );
        };
    };      
} // end deactivate

它工作得很好。除了因为自定义帖子类型是使用运行这两个功能的相同插件创建的,帖子类型在帖子本身可以通过wp_delete_post之前被删除。当我在没有自定义帖子类型的情况下测试这些功能时,会在激活时添加帖子并在停用时删除。所以我知道问题出在帖子类型上。有谁知道如何解决这个问题?

【问题讨论】:

    标签: wordpress custom-post-type dummy-data


    【解决方案1】:

    尝试这样的事情(YOUTPOSTTYPE 是您的帖子类型的名称):

    function deactivate () {
      $args = array (
        'post_type' => 'YOURPOSTTYPE',
        'nopaging' => true
      );
      $query = new WP_Query ($args);
      while ($query->have_posts ()) {
        $query->the_post ();
        $id = get_the_ID ();
        wp_delete_post ($id, true);
      }
      wp_reset_postdata ();
    }
    

    它适用于我的插件,它应该适用于您的插件。 (已经用 WordPress 3.5.1 测试过)。

    【讨论】:

    • 太棒了!完美运行。
    【解决方案2】:

    wp_delete_post($ID, false) 将其发送到垃圾箱。只有当您从垃圾箱中删除时,帖子才会真正删除。这就是它与 $force = true 一起使用的原因。

    所以它按预期工作。第一个帖子进入垃圾箱,然后它们实际上被删除。比如回收站。跟踪 post_status 更改以查看它何时进入垃圾箱,如果您想执行任何操作。否则等待删除。

    同时删除 uninstall 上的内容,而不是停用。 考虑停用插件,将其暂停,并在您真正希望它消失时将其卸载。

    【讨论】:

      【解决方案3】:

      试试这个功能

      function deactivate () {             
              $args = array(
                  'post_type'      => 'POST_TYPE', 
                  'posts_per_page' => - 1
              );
      
              if ( $posts = get_posts( $args ) ) {
                  foreach ( $posts as $post ) {
                      wp_delete_post( $post->ID, true );
                  }
              }
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-06-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-01-03
        • 1970-01-01
        相关资源
        最近更新 更多