it-swarm.com.de

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 (Term Slugs) zu verwenden, aber überraschenderweise ist dies, wie ich heute festgestellt habe, auch bei benutzerdefinierten Taxonomien der Fall.

Wenn meine Site beispielsweise eine Kategorie namens Linux (linux) hat und ich auch einen benutzerdefinierten Taxonomiebegriff namens 'Linux' erstellen möchte, sieht das ungefähr so ​​aus wie Linux (linux-2), d. H., Die Slugs müssen unterschiedlich sein.

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

Können unter Kategorien/Tags und benutzerdefinierten Taxonomien dieselben Begriffe verwendet werden (ohne Chaos zu verursachen)?


Wie das Problem zu replizieren?

  1. Erstelle 3-5 neue Beiträge. Erstellen Sie eine neue Kategorie und markieren Sie sie und weisen Sie sie diesen Posts zu (nur zu Testzwecken).

  2. Permalink-Einstellungen speichern.

  3. erstellen Sie zwei neue Begriffe unter der benutzerdefinierten Taxonomie mit demselben Namen und derselben Bezeichnung 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. Versuchen Sie, sie neu zu erstellen, und Sie erhalten jetzt die Fehlermeldung: "Der Slug 'XXX' wird bereits von einem anderen Begriff verwendet."

Manchmal würde dies 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, führen Sie dies aus. Benennen Sie dann einen von ihnen um, und Sie werden feststellen, dass sowohl die Kategorie (oder das Tag) als auch die benutzerdefinierte Taxonomie umbenannt werden!

8
its_me

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

Wenn alles wie geplant verläuft, wird es repariert 3.83.94.1 4.2. UPDATE: Ja, behoben !


In der Zwischenzeit gibt es einen Plan zur Behebung des Problems: Legen Sie automatisch ein benutzerdefiniertes 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, d. H., Dass nur die neuen Begriffe der Taxonomie (in unserem Fall "books") mit unserem benutzerdefinierten Suffix ("-books") erstellt werden.

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 ...

Sichern Sie die Datenbank und führen Sie eine reguläre Suche durch und ersetzen Sie 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.

9
its_me