问题描述
所以最近我把客户从 Blogger 转移到 Wordpress 。
从博客导入帖子时,它将博客”labels” 保存为 WordPress 中的”tags” 。由于我想要将这些作为类别,我使用一个插件将所有标签转换为类别。
这个工作很好,很花园,但是在我的所有帖子中都没有分类。所以现在我有大约 900 个帖子,都附有正确的分类,以及”Uncategorized” 。
所以我的目标是从所有 900 个帖子中删除”Uncategorized”,但是我很难找到一个快速的方法来做到这一点。
有没有人知道如何以批量方式实现这一点?
最佳解决思路
安装了 wp-cli,您可以运行这样一个 bash 脚本,以从具有多个类别的所有帖子中删除’uncategorized’ 类别
#!/bin/bash
for post in $(wp post list --field=ID)
do
count=$(wp post term list $post 'category' --fields='name' --format="count")
if [ "$count" -gt "1" ]
then
wp post term remove $post category 'uncategorized'
fi
done
将其另存为 delete_uncategorized.bash
,然后从命令行运行 bash delete_uncategorized.bash
。
次佳解决思路
有点迟到党派,但我只需要自己做这个。解决方法是通过 phpmyadmin 中的 SQL 查询,如下所示:
SELECT *
FROM `wp_term_relationships`
WHERE `term_taxonomy_id`
IN ( SELECT `term_taxonomy_id`
FROM `wp_term_taxonomy`
WHERE `taxonomy` = 'category' )
GROUP BY `object_id`
HAVING ( COUNT( `object_id` ) >1 )
(用前缀替换 wp_前缀) 通常”uncategorized” 有一个 term_taxonomy_id = 1 。上述查询将对所有有多个类别的所有帖子 ID 进行分组,因此自然会在分组中显示”uncategorized” 。所以选择所有那些具有 term_taxonomy_id = 1 的行并删除它们。这就是它!
现在您只需编辑 wp_term_taxonomy 表中”uncategorized”(term_taxonomy_id = 1) 的计数字段即可。计数是在此类别中列出的文章数量,但特定字段不会自动更新。
如果你去你的 wp 管理面板,类别部分,旧的 (错误的) 计数仍然显示,但是如果你按这个号码,并且去’uncategorized’ 的帖子列表,wordpress 通常会重新记录与该类别相关联的帖子。正确的计数将显示在右上方,因此请转到数据库中,并相应地编辑计数字段:)
编辑:实际上,计数确实得到最终更新,只是不是马上,所以你可能想跳过手动计数更新。
第三种解决思路
这是一个插件,激活后,循环遍历未分类类别的所有帖子。如果它在另一个类别,它会删除未分类。此外,当保存帖子时,它执行相同的检查。
<?php
/**
* Plugin Name: Remove Uncategorized
* Description: Removes the uncategorized category if there's another category.
* Author: Nathan Johnson
* Licence: GPL2+
* Licence URI: https://www.gnu.org/licenses/gpl-2.0.en.html
*/
//* Don't access this file directly
defined( 'ABSPATH' ) or die();
register_activation_hook( __FILE__ , 'wpse_106269_activation' );
function wpse_106269_activation() {
$args = array(
'posts_per_page' => -1,
'offset' => 0,
'category' => get_option( 'default_category' ),
'post_status' => 'any',
'suppress_filters' => true,
);
$posts = get_posts( $args );
foreach( $posts as $post ) {
wpse_106269_maybe_remove_uncategorized_category( $post->ID );
}
}
add_action( 'save_post', 'wpse_106269_save_post', 10, 3 );
function wpse_106269_save_post( $id, $post, $update ) {
remove_action( 'save_post', 'wpse_106269_save_post', 10, 3 );
wpse_106269_maybe_remove_uncategorized_category( $id );
add_action( 'save_post', 'wpse_106269_save_post', 10, 3 );
}
function wpse_106269_maybe_remove_uncategorized_category( $id ) {
$categories = get_the_category( $id );
$default = get_cat_name( get_option( 'default_category' ) );
if( count( $categories ) >= 2 && in_category( $default, $id ) ) {
wp_remove_object_terms( $id, $default, 'category' );
}
}
参考文献
注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。