删除70K帖子和附加媒体的简单方法?

时间:2019-11-14 作者:Julix

一个插件创建了许多我现在需要删除的帖子。它们可按类别定位(例如。Tweet). 许多还附有图片。

我为它写了一个php脚本*,但没有分页,它就会挂起,因为它做了很多工作(逐个删除帖子)。-而且分页(比如说每页1000页)仍然需要几秒钟,我必须刷新>50次。。。

我认为一个好的数据库查询可以同时选择和删除多篇文章,但是我还想删除数据库和实际文件中所有连接的媒体。

或者,分批处理删除(即使用分页),并可能在两者之间刷新输出,以显示其是否正常工作的更新。

以下是我目前掌握的情况:

$twitter = get_cat_ID( \'Tweet\' );
$instagram = get_cat_ID( \'Instagram\' );
$args = array(
    \'category__in\' => array(
        $twitter,
        $instagram
    ),
    \'post_status\' => \'any\',
    \'posts_per_page\' => 1000
);
$social_posts = new WP_Query( $args );

if ( $social_posts->have_posts() ) : ?>

    <h1>Deleting the following:</h1>
    <ul>
    <?php while ( $social_posts->have_posts() ) :
        $social_posts->the_post();
    ?>
        <li>
            <h5><?php the_title() ?></h5>
            <div class=\'post-content\'><?php the_content(); ?></div>
        </li>
        <?php
        $post_id = get_the_ID();
        $attachments = get_attached_media( \'\', $post_id ); // \'\' => all attachment Mime types
        foreach ( $attachments as $attachment ) {
            wp_delete_attachment( $attachment->ID, true );
        }
        wp_delete_post( $post_id, true );
    endwhile;
else: ?>
    <p>Oops, there are no posts.</p>
<?php
endif;
(本地测试,放入page-uninstall-social.php 并为其创建了一个页面,以便在我访问该页面时运行)

2 个回复
SO网友:Tom J Nowell

如果您知道如何查找帖子,那么我们可以使用WP CLI执行两步过程。

首先,使用wp post list

E、 g。

posts=$(wp post list --field="ID" --category__in="1,2,etc")
wp post delete $posts --force
然后我们可以插入这些值posts 进入wp post delete.

我们也可以使用相同的技巧通过post_parent__in 参数获取它们的ID,然后删除它们。

如果无法直接在服务器上运行WP CLI,请将副本下拉到计算机,运行命令,然后使用结果替换生产

SO网友:Howdy_McGee

The below code is untested | use are your own risk.

非CLI方法可能只是查询ID、循环ID、删除与ID关联的媒体、重定向回自身以进行下一次迭代。

这是基于浏览器的,您需要导航到网站的特定url。它专门寻找delposts 查询变量。

domain.com/?delposts=true

add_action( \'template_redirect\', function() {

    if( ! isset( $_GET[\'delposts\'] ) ) {
        return;
    }

    $page       = ( isset( $_GET[\'page\'] ) ) ? intval( $_GET[\'page\'] ) : 1;
    $twitter    = get_cat_ID( \'Tweet\' );
    $instagram  = get_cat_ID( \'Instagram\' );

    $social_posts = get_posts( array(
        \'category__in\'      => array(
            $twitter,
            $instagram
        ),
        \'post_status\'       => \'any\',
        \'posts_per_page\'    => 200,
        \'fields\'            => \'ids\',
    ) );

    if( ! empty( $social_posts ) ) {

        foreach( $social_posts as $post_id ) {

            $media = get_posts( array(
                \'post_parent\'   => $post_id,
                \'post_type\'     => \'attachment\'
                \'posts_per_page\'=> 500,
                \'fields\'        => \'ids\',
            ) );

            if( ! empty( $media ) ) {
                foreach( $media as $media_id ) {
                    wp_delete_attachment( $media_id );
                }
            }

            wp_delete_post( $post_id, true );

        }

        wp_safe_redirect( add_query_arg( array(
            \'delposts\'  => true,
            \'page\'      => $page++,
        ), home_url() ) );
        exit();

    }

} );

相关推荐

Adding parent pages to posts

我想在我的博客帖子中添加一个父页面,这样我就可以在分析上跟踪他们的流量。我想避免在标题中添加额外的跟踪代码,以避免减慢我的网站速度。因此,我要创建的是:实例com/blog/post(当前我的网站默认为example.com/post)我已经研究了一些事情,我想避免由于永久链接对SEO、我的网站等的整体影响而不得不更改永久链接设置。如有任何建议,将不胜感激!谢谢大家!