删除帖子的最有效方式

时间:2013-03-12 作者:urok93

我有一个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();
}  

2 个回复
最合适的回答,由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.

结束

相关推荐

Add Column to Term Database

目前,术语数据库有四列。term_id name slug term_group. 我想添加另一个名为menu_order.我该怎么做?我想要的结果是能够订购我的自定义条款。如果有人知道更好的方法,请告诉我。到目前为止,我已经有了设置输入框的代码。我只是需要帮助,试着用get_terms() 作用add_action ( \'section_edit_form_fields\', \'create_section_menu_order\'); function create_section_men