web-dev-qa-db-ja.com

カスタム分類法にカテゴリと同じ用語(ナメクジ)を付けることはできませんか?

カテゴリとタグの下に同じ用語(用語ナメクジ)を入れることは不可能であることを私は知っていましたが、驚くべきことに、今日実現したように、カスタム分類法の場合もそうです。

したがって、たとえば、私のサイトにLinux (linux)というカテゴリがあり、私も 'Linux'というカスタム分類用語を作成する場合は、Linux (linux-2)のようになります。つまり、スラッグは異なる必要があります。

スラッグの名前をlinuxに変更しようとすると、 "スラッグ 'linux'は既に別の用語で使用されています" となります。

カテゴリ/タグとカスタム分類法の下で同じ用語を使用することは可能ですか(混乱を招くことなく)。


問題の再現方法

  1. 3〜5個の新しい投稿を作成します。新しいカテゴリとタグを作成し、それらをそれらの投稿に割り当てます(テスト目的のみ)。

  2. パーマリンク設定を保存します。

  3. 以前に作成したカテゴリとタグと同じ名前とスラッグを使用して、カスタム分類法の下に2つの新しい用語を作成し、それらをカスタム投稿タイプの下の新しい投稿に割り当てます。

  4. カスタム分類法を削除します。

  5. "スラッグ 'XXX'は既に別の用語で使用されています。"

時にはそれが問題を再現することもあれば、そうでないこともあります。

しかし...

同じ名前とスラッグを使ってカテゴリ(またはタグ)とカスタム分類法を作成できる場合は、それを実行してください。次に、そのうちの1つを名前変更すると、カテゴリ(またはタグ)とカスタム分類法の両方が名前変更されていることがわかります。

8
its_me

結局のところ、これはコアのバグです。私はそれを報告しようとしていましたが、それは何年ものようにそこにあったことがわかり、そしてカスタム分類学にも適用されます。チケットを見てください: #5809#21950 そして #22023

すべてが計画通りに行けば、それは修正されるように設定されています 3.83.94.1 4.2。 更新: うん、 固定


それまでの間、問題を解決するための計画があります - 分類法の下で新しく作成されたすべての用語にカスタムスラッグサフィックスを自動的に設定します。

/*
 * 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 );

そしてバグが修正されたら...

データベースをダンプして正規表現検索を行い、 Sublime Text または TextMate (または のように )のような適切なテキストエディタを使用して置換します。

おそらくそれを行うための最善の方法ではありませんが、仕事を成し遂げるのに十分なほど良いです。

9
its_me