問題描述

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