我设置了一个添加自定义帖子类型的插件,然后在激活时带来一堆虚拟内容和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
之前删除帖子类型。当我在没有自定义帖子类型的情况下测试这些功能时,在激活时添加帖子并在停用时删除。所以我知道问题在于帖子类型。有谁知道如何解决这个问题?
答案 0 :(得分: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进行了测试)。
答案 1 :(得分:1)
wp_delete_post($ID, false)
将其发送到“已删除邮件”。仅当您从“已删除邮件”中删除邮件时,才会将其删除。这就是为什么它适用于$force = true
。
所以它按预期工作。第一篇文章转到垃圾箱,然后实际删除。像回收站一样。如果您想要执行任何操作,请跟踪post_status
更改以查看它何时到达“已删除邮件”。否则等待删除。
同时删除uninstall上的内容,而不是取消停用。请考虑停用插件暂停,并在您真正想要它时将其卸载。
答案 2 :(得分: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 );
}
}
}