Können benutzerdefinierte Taxonomien nicht dieselben Begriffe (Slugs) wie Kategorien haben?

Ich wusste, dass es nicht möglich ist, unter Kategorien und Tags dieselben Begriffe zu verwenden, aber überraschenderweise ist dies, wie ich heute festgestellt habe, auch bei benutzerdefinierten Taxonomien der Fall.

Wenn zum Beispiel meine Seite eine Kategorie namens Linux (linux) und ich einen eigenen Taxonomie-Begriff namens “Linux” erstellen möchte, sieht das ungefähr so ​​aus wie Linux (linux-2) , dh die Nacktschnecken müssen sein anders.

Und wenn ich versuche, den Slug wieder in linux umzubenennen, bekomme ich den Fehler “Der Slug ‘linux’ wird bereits von einem anderen Begriff verwendet” .

Ist es möglich, die gleichen Begriffe unter Kategorien / Tags und benutzerdefinierten Taxonomien zu haben (ohne Chaos zu verursachen)?


Wie repliziert man das Problem?

  1. Erstelle 3-5 neue Posts. Erstellen Sie eine neue Kategorie und ein neues Tag und weisen Sie sie diesen Posts zu (nur zu Testzwecken).

  2. Speichern Sie die Permalink-Einstellungen.

  3. Erstellen Sie unter der benutzerdefinierten Taxonomie zwei neue Begriffe mit demselben Namen und derselben Slug wie die Kategorie und das Tag, die Sie zuvor erstellt haben, und weisen Sie sie einem neuen Post unter einem benutzerdefinierten Posttyp zu.

  4. Löschen Sie die benutzerdefinierten Taxonomien.

  5. Versuchen Sie, sie neu zu erstellen, und Sie erhalten jetzt den Fehler: “Der Slug ‘XXX’ wird bereits von einem anderen Begriff verwendet.”

Manchmal würde das das Problem replizieren, manchmal nicht.

Aber…

Wenn Sie in der Lage sind, eine Kategorie (oder ein Tag) und eine benutzerdefinierte Taxonomie mit demselben Namen und Slug zu erstellen, tun Sie es. Benennen Sie dann einen von ihnen um und Sie werden bemerken, dass sowohl die Kategorie (oder das Tag) als auch die benutzerdefinierte Taxonomie umbenannt werden!

Solutions Collecting From Web of "Können benutzerdefinierte Taxonomien nicht dieselben Begriffe (Slugs) wie Kategorien haben?"

Es stellt sich heraus, dass dies ein Fehler im core ist. Ich wollte es berichten, fand aber heraus, dass es seit Jahren dort ist und auch für benutzerdefinierte Taxonomien gilt. Siehe Tickets: # 5809 , # 21950 und # 22023 .

Wenn alles wie geplant abläuft, wird es festgelegt 3.8 3.9 4.1 4.2. UPDATE: Ja, behoben !


In der Zwischenzeit ist hier ein Plan, um das Problem zu beheben – automatisch ein benutzerdefiniertes Slug-Suffix für alle neu erstellten Begriffe unter einer Taxonomie festlegen:

 /* * 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' ) { // eg 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 ); } } 

Dies ist nicht rückblickend, dh nur die neuen Begriffe unter der Taxonomie (in unserem Fall “Bücher”) werden mit unserem benutzerdefinierten Suffix (“-books”) erzeugt.

Um stattdessen ein Präfix festzulegen, ändern Sie diese Zeile in der function:

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

zu so etwas:

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

Und sobald der Fehler behoben ist …

Dump die database und eine Regex-Suche und ersetzen Sie mit einem geeigneten Texteditor wie Sublime Text oder TextMate (oder so ).

Wahrscheinlich nicht der beste Weg, es zu tun, aber gut genug, um die Arbeit zu erledigen.