問題描述

我知道在類別和標籤下不可能有相同的術語 (術語 s s),但令人驚訝的是,正如我今天意識到的那樣,自定義分類法也是如此。

所以例如,如果我的網站有一個名為 Linux (linux)的類別,並且我想建立一個名為’Linux’ 的自定義分類術語,它會像 Linux (linux-2)一樣,即 lug 子必須是不同的。

如果我嘗試重新命名為 linux,我會收到錯誤,「s lug ‘linux’ 已經被另一個術語使用了」 。

在類別/標籤和自定義分類法下是否可以使用相同的術語 (不會造成破壞)?


如何複製問題?

  1. 建立 3-5 個新職位。建立一個新的類別和標籤,並將它們分配給這些帖子 (僅用於測試目的) 。

  2. 儲存永久連結設定。

  3. 在自定義分類法下建立與您之前建立的類別和標籤相同的名稱和 s 尾的兩個新術語,並將其分配給自定義帖子型別下的新帖子。

  4. 刪除自定義分類法。

  5. 請嘗試重新建立它們,然後您會收到錯誤:「s lug ‘XXX’ 已被另一個術語使用。」

有時會複製這個問題,有時候它不會。

但…

如果您能夠建立一個類別 (或標籤) 和具有相同名稱和分數的自定義分類法,請執行此操作。然後,重新命名其中一個,你會注意到類別 (或標籤) 和自定義分類法都被重新命名了!

最佳解決思路

原來,這是一個核心的錯誤。我即將舉報,但發現它已經存在了,就像幾年一樣,也適用於定製分類法。參見門票:#5809#21950#22023

如果全部按計劃進行,則設定為 3.8 3.9 4.1 4.2 。更新:是的,fixed


在此期間,這是一個克服這個問題的計劃 – 為分類法下的所有新建立的術語自動設定一個自定義段落字尾:

/*
 * Set custom slug suffix for terms of a taxonomy
 *
 * http://wordpress.stackexchange.com/q/42550/10691
 * http://wordpress.stackexchange.com/q/71304/10691
 * http://wordpress.stackexchange.com/q/120096/10691
 * https://github.com/WordPress/WordPress/blob/master/wp-includes/taxonomy.php
 */
add_action( 'created_term', 'aahank_add_suffix_to_term', 10, 3 );
function aahank_add_suffix_to_term( $term_id, $tt_id, $taxonomy ) {
    if( $taxonomy == 'book' ) {

        // e.g. Term name 'PHP' and term slug 'php-books'
        $term = get_term( $term_id, $taxonomy );
        $args = array( 'slug' => $term->slug . '-books' );
        wp_update_term( $term_id, $taxonomy, $args );

    }
}

這不是追溯性的,也就是我們的自定義字尾 (‘-books’) 建立了分類下的新術語 (我們的例子是’books’) 。

要改為設定字首,請在函式中更改此行:

$args = array( 'slug' => $term->slug . '-books' );

像這樣:

// e.g. Term name 'PHP' and term slug 'books-php'
$args = array( 'slug' => 'books-' . $term->slug );

一旦 bug 修復了

轉儲資料庫,並使用正確的文字編輯器 (如 Sublime TextTextMate(或 like this)) 進行正規表示式搜尋和替換。

可能不是最好的方法,但是要做好這項工作就夠好了。

參考文獻

注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。