問題描述
所以最近我把客戶從 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 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。