自定义帖子在卸载时不删除

时间:2019-06-29 作者:Knownow

我刚刚开始学习WP编码。所以,我试图在卸载插件时删除所有自定义帖子。我已创建卸载。php在我的插件根目录中,并具有以下内容:

<?php

if(!defined(WP_UNINSTALL_PLUGIN)){
    die();
}

// Delete Database  
$books= get_posts([\'post_type\'=>\'book\',\'numberposts\'=>-1]);// all posts
foreach($books as $book){
    wp_delete_post($book->ID,true);
}
卸载时,我收到一个错误“删除失败”。谁能告诉我出了什么问题吗?此外,如何在WP中调试此类问题?我在wp配置中启用了以下功能

define(\'WP_DEBUG\', true);
define( \'WP_DEBUG_LOG\', true );
但我在插件屏幕中除了“删除失败”之外,没有看到任何有用的调试消息,在启用上述两项后,我的wp内容中也没有看到debug.log文件。

我还尝试使用SQL删除,如下所示:

global $wpdb;
$wpdb->query("DELETE FROM wp_posts WHERE post_type=\'book\'");
$wpdb->query("DELETE from wp_postmeta WHERE post_id NOT IN( SELECT id FROM wp_posts");
即使这样,也会出现删除失败的错误。停用后,我在数据库中看到了带有post\\u类型的自定义帖子,我不知道这为什么不起作用。

2 个回复
SO网友:Chetan Vaghela

尝试以下操作:

$args = array (
    \'post_type\' => \'book\',
    \'nopaging\' => true
  );
  $myquery = new WP_Query ($args);
  while ($myquery->have_posts ()) {
    $myquery->the_post ();
    $id = get_the_ID ();
    wp_delete_post ($id, true);
  }
  wp_reset_postdata ();
如果这对你有用,请告诉我!

SO网友:Valerii Vasyliev

也许,在停用插件后,您的post\\u类型已经没有定义

尝试通过wpdb sql请求删除

<?php
  if (!defined("WP_UNINSTALL_PLUGIN"))
    exit();

    global $wpdb;

    $post_type = \'book\';

    $result = $wpdb-> query (
         $wpdb-> prepare ("
             DELETE posts, pt, pm
             FROM ". $wpdb-> prefix." Posts
             LEFT JOIN ". $wpdb-> prefix." Term_relationships pt ON pt.object_id = posts.ID
             LEFT JOIN ". $wpdb-> prefix." Postmeta pm ON pm.post_id = posts.ID
             WHERE posts.post_type =% s
             ",
             $post_type
         )
     );

相关推荐