删除所有没有特定标签的帖子

时间:2017-03-16 作者:pixelkicker

我正试图清理4000多个帖子的数据库,编辑们用“audit2017”标签标记了他们想要保留的帖子。SQL有没有办法选择所有没有此标记的帖子*并将其删除?

我对SQL不是很有经验,但如果我有正确的查询,我可以管理它。

感谢您的帮助!

2 个回复
SO网友:Mihai Apetrei

正在研究这一点,以帮助您找到解决方案。我无法为sql面板找到一个标签,但我想您可以先获得所有没有该标签id的帖子(如下所示https://codex.wordpress.org/Class_Reference/WP_Query):

$query = new WP_Query( array( \'tag__not_in\' => array( 37, 47 ) ) );

然后使用一些php删除它们:

  • https://developer.wordpress.org/reference/functions/wp_delete_post/http://wordpress.stackexchange.com/questions/48214/manually-delete-post-from-database
如果客户端做了完全相反的事情,那么这个插件是完美的,它为所有他不想保留的帖子添加了一个特定的标签:https://wordpress.org/plugins/bulk-delete/

希望这些信息有帮助。

SO网友:Raham

我刚刚创建了一个函数,可以批量删除没有特定标记的帖子。

您需要具有要保留其帖子的标签的ID。[如果您不知道如何获取这些id:快速解决方案是转到网站管理面板上的标签页。单击标签。在新页面地址栏中,您可以看到标签id]

更换;TagID“;与您的实际标记ID在这一行:

$tags_to_delete = array( $TagID1, $TagID2 , ... );
然后将代码放在主题函数的末尾。php文件。打开主页。它会将所有没有特定标签的帖子移到垃圾箱。

每次在前端打开页面时,都会运行此代码。

运行时取决于post数量和服务器配置。我在配置不太高的服务器上测试了大约3500篇文章,大约花了40秒才完成。

我强烈建议您在完成后从网站中删除代码。

// Change the $TagIDs with the tag IDs in your database
$tags_to_delete = array( $TagID1, $TagID2 , ... );

// This function will bulk delete posts that don\'t have specific tag(s)
function delete_posts_by_not_tag( $tags ) {

// WP_Query arguments
$args = array(
        \'post_type\'              => array( \'post\' ),
        \'nopaging\'               => true,
        \'posts_per_page\'         => \'-1\',
         \'tag__not_in\'           => array( $tags ),
);

// The Query
$query = new WP_Query( $args );

// The Loop
if ( $query->have_posts() ) {

        $totalpost = $query->found_posts;
        echo "Number of Posts: " . $totalpost;

        echo "<hr>";

        while ( $query->have_posts() ) {
                $query->the_post();

                $current_id = $post->ID;
                wp_delete_post( $current_id );
                echo "Post by ID \'" . $current_id . "\' is deleted.<br>";
        }

        echo "<hr>";

} else {

  echo "No post found to delete!";

}

// Restore original Post Data
wp_reset_postdata();

}

// Run the function to delete all the posts that don\'t have specific tag(s)
delete_posts_by_not_tag( $tags_to_delete );


 

相关推荐

如何像使用wpdb一样使用MySQL?

根据标题,我需要使用LIKE操作符以编程方式使用$wpdb删除db上的一行。我想使用$wpdb->delete 消除发生的情况,但我不知道如何设置LIKE 操作员,因为在WHERE 它需要一个指定单个值或另一个数组的数组。我问你这个语法是否正确。$wpdb->delete(\'wp_posts\', array(\'post_type\' => \'flamingo_inbound\', \'post_content\' => \'%\'.$mail.\'%\'));提前感谢