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

8

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

Wenn meine Site beispielsweise eine Kategorie mit dem Linux (linux)Namen "Linux" hat und ich auch einen benutzerdefinierten Taxonomiebegriff mit dem Namen "Linux" erstellen möchte, sieht dies ungefähr so ​​aus Linux (linux-2), dh die Slugs müssen unterschiedlich sein.

Und wenn ich versuche, den Slug wieder in umzubenennen linux, wird die Fehlermeldung "Der Slug 'Linux' wird bereits von einem anderen Begriff verwendet" angezeigt .

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


Wie repliziere ich das Problem?

  1. Erstellen Sie 3-5 neue Beiträge. 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 zwei neue Begriffe unter der benutzerdefinierten Taxonomie mit demselben Namen und demselben Slug wie die zuvor erstellte Kategorie und das zuvor erstellte Tag und weisen Sie sie einem neuen Beitrag unter einem benutzerdefinierten Beitragstyp zu.

  4. Löschen Sie die benutzerdefinierten Taxonomien.

  5. Wenn Sie versuchen, sie neu zu erstellen, wird nun die Fehlermeldung angezeigt: "Die Schnecke 'XXX' wird bereits von einem anderen Begriff verwendet."

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

Aber...

Wenn Sie eine Kategorie (oder ein Tag) und eine benutzerdefinierte Taxonomie mit demselben Namen und derselben Slug erstellen können, tun Sie dies. Benennen Sie dann eine davon um, und Sie werden feststellen, dass sowohl die Kategorie (oder das Tag) als auch die benutzerdefinierte Taxonomie umbenannt werden!

da ich bin
quelle
Hmm, das passiert mir nicht. Können Sie Ihren benutzerdefinierten Taxonomiecode einfügen?
Matthew Boynes
@MatthewBoynes Oh, so sieht es aus: gist.github.com/anonymous/5267905cccae4d52cc1b
its_me
Ich verwende die neueste nächtliche Version von WordPress und Ihr Code tritt wörtlich nicht auf diesen Fehler. Folgendes sollten Sie als Nächstes tun: (1) Fügen Sie in einer Neuinstallation von WordPress 3.6.1 nur Ihren Beitragstyp und Ihren Taxonomiecode zu einem sauberen Thema hinzu. Verwenden Sie Twenty Thirteen oder Toolbox oder so. Wenn es funktioniert, wissen Sie, dass das Problem nicht in WP liegt, sondern mit einem Plugin oder Ihrem Thema. Versuchen Sie in diesem Fall dasselbe mit dem neuesten nächtlichen Build von 3.7. Wenn es funktioniert, müssen Sie sich keine Sorgen machen, da 3.7 wahrscheinlich nächste Woche startet. Wenn dies immer noch der Fall ist, geben Sie den gesamten Code an, der zum Replizieren erforderlich ist.
Matthew Boynes
@ MatthewBoynes Okay. Ich werde es testen und sehen. Übrigens bin ich schon auf 3.7 stabil, irgendwann gestern / heute veröffentlicht.
its_me
Ah, du hast recht, das habe ich irgendwie verpasst!
Matthew Boynes

Antworten:

9

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

Wenn alles wie geplant verläuft, wird es so eingestellt, dass es repariert wird 3.8 3.9 4.14.2. UPDATE: Ja, behoben !


In der Zwischenzeit ist hier ein Plan zur Behebung des Problems: Legen Sie automatisch ein benutzerdefiniertes Slug-Suffix für alle neu erstellten Begriffe unter einer Taxonomie fest:

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

    }
}

Dies ist keine Retrospektive, dh nur die neuen Begriffe unter der Taxonomie (in unserem Fall "Bücher") werden mit unserem benutzerdefinierten Suffix ("-books") erstellt.

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

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

zu so etwas:

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

Und sobald der Fehler behoben ist ...

Speichern Sie die Datenbank und führen Sie eine Regex-Suche durch und ersetzen Sie sie mit einem geeigneten Texteditor wie Sublime Text oder TextMate (oder ähnlichem ).

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

da ich bin
quelle