0

我设置了一个插件,它添加了一个自定义帖子类型,然后在激活时引入了一堆带有 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。当我在没有自定义帖子类型的情况下测试这些功能时,帖子会在激活时添加并在停用时删除。所以我知道问题出在帖子类型上。有谁知道如何解决这个问题?

4

3 回答 3

3

尝试这样的事情(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 测试过)。

于 2013-02-21T21:43:01.713 回答
1

wp_delete_post($ID, false)将其发送到垃圾箱。只有当您从垃圾箱中删除时,帖子才会真正被删除。这就是为什么它与$force = true.

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

还要在卸载而不是停用时删除内容。考虑停用插件作为暂停它并在您真正希望它消失时将其卸载。

于 2014-06-30T19:48:18.990 回答
0

试试这个功能

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 );
            }
        }
    }
于 2020-02-04T09:58:18.147 回答