我有一个cron作业集,可以从数据库中删除(有时是大量)帖子。当然,我还需要删除所有相关数据,例如自定义字段。
这是我当前正在运行的函数,但删除所有内容需要一些时间。
直接进行SQL查询是否更有效?
/**
* Delete all items
*
*/
function myplugin_delete_all_items() {
$args = array(
\'post_type\' => \'my_post_type\',
\'posts_per_page\' => -1,
);
$items = new WP_Query( $args );
if ( $items->have_posts() ) :
while ( $items->have_posts() ) : $items->the_post();
$postid = get_the_ID();
$purge = wp_delete_post( $postid, true );
endwhile;
endif;
wp_reset_postdata();
}
最合适的回答,由SO网友:Mark Kaplun 整理而成
是的,但除非您完全了解您的系统,并且它将被冻结在该状态,否则这可能是危险的。
你能确定你知道数据库中引用帖子的所有地方吗?有post表、元数据表、分类法和插件。如果你想清楚了,你确定没有人会安装使用其他表的新插件吗
如果使用缓存插件,如何从缓存中删除信息?
此外,风险即使很小,也可能毫无意义,因为cron进程发生在远离用户眼睛的地方,所以花多少时间无关紧要。
SO网友:chrisguitarguy
您可以使用wpdb
直接删除某一类型的所有帖子。wpdb::delete
就是你要找的。像这样的。。。
<?php
function wpse90453_delete($post_type)
{
global $wpdb;
$wpdb->delete($wpdb->posts, array(\'post_type\' => $post_type), array(\'%s\'));
}
// usage: wpse90453_delete(\'my_post_type\');
请记住,这远没有你所做的那么完整。
wp_delete_post
负责清理所有内容:术语、元数据、修订、注释等。
如果您不需要执行任何操作,那么上述解决方案将很好地工作。如果你确实需要清理一切,继续做你正在做的事情并使用wp_delete_post
.