Le tassonomie personalizzate non possono avere gli stessi termini (lumache) delle categorie?


8

Sapevo che non è possibile avere gli stessi termini (termini slug) in categorie e tag, ma sorprendentemente, come ho capito oggi, è il caso anche delle tassonomie personalizzate.

Quindi, ad esempio, se il mio sito ha una categoria chiamata Linux (linux)e voglio creare anche un termine di tassonomia personalizzato chiamato "Linux", sembrerebbe qualcosa del genere Linux (linux-2), cioè le lumache devono essere diverse.

E se provo a rinominare la lumaca in linux, ottengo l'errore, "La lumaca 'Linux' è già in uso da un altro termine" .

È possibile avere gli stessi termini in categorie / tag e tassonomie personalizzate (senza creare scompiglio)?


Come replicare il problema?

  1. Crea 3-5 nuovi post. Crea una nuova categoria e tag e assegnali a quei post (solo a scopo di test).

  2. Salva le impostazioni del permalink.

  3. crea due nuovi termini sotto la tassonomia personalizzata con lo stesso nome e la stessa lumaca della categoria e tag precedentemente creati e assegnali a un nuovo post con un tipo di post personalizzato.

  4. Elimina le tassonomie personalizzate.

  5. Prova a ricrearli e ora visualizzerai l'errore: "La lumaca 'XXX' è già in uso da un altro termine".

A volte questo potrebbe replicare il problema, a volte no.

Ma...

Se sei in grado di creare una categoria (o tag) e una tassonomia personalizzata con lo stesso nome e la stessa lumaca, fallo. Quindi, rinomina uno di essi e noterai che sia la categoria (o tag) sia la tassonomia personalizzata sono state rinominate!


Hmm, questo non succede per me. Riesci a incollare il tuo codice di tassonomia personalizzato?
Matthew Boynes,

@MatthewBoynes Oh, ecco come appare: gist.github.com/anonymous/5267905cccae4d52cc1b
its_me

Sto usando l'ultima build notturna di WordPress e il tuo codice, alla lettera, non rileva questo errore. Ecco cosa dovresti fare dopo: (1) In un'installazione pulita di WordPress 3.6.1, aggiungi solo il tipo di post e il codice tassonomia a un tema pulito. Usa Twenty Thirteen o Toolbox o qualcosa del genere. Se funziona, sai che il problema non è in WP ma invece con un plugin o il tuo tema. In tal caso, prova la stessa cosa con l'ultima versione notturna di 3.7. Se funziona, non devi preoccuparti perché probabilmente 3.7 verrà lanciato la prossima settimana. Se il problema persiste, fornire tutto il codice necessario per replicarlo.
Matthew Boynes,

@MatthewBoynes Ok. Lo proverò e vedrò. A proposito, sono già su 3.7 stabile, rilasciato qualche volta ieri / oggi.
its_me

Ah, hai ragione, in qualche modo mi è mancato!
Matthew Boynes,

Risposte:


9

Si scopre, questo è un bug nel nucleo. Stavo per segnalarlo, ma ho scoperto che è stato lì, come anni, e si applica anche alle tassonomie personalizzate. Vedi i biglietti: # 5809 , # 21950 e # 22023 .

Se tutto procede come previsto, è impostato per essere corretto 3.8 3.9 4.14.2. AGGIORNAMENTO: Sì, corretto !


Nel frattempo, ecco un piano per superare il problema: imposta automaticamente un suffisso di lumaca personalizzato per tutti i termini appena creati sotto una tassonomia:

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

    }
}

Questa non è una retrospettiva, vale a dire le lumache dei soli nuovi termini sotto la tassonomia ("libri" nel nostro caso) vengono create con il nostro suffisso personalizzato ("-books").

Per impostare invece un prefisso, cambia questa riga nella funzione:

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

a qualcosa del genere:

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

E una volta che il bug è stato risolto ...

Scarica il database ed esegui una ricerca regex e sostituiscilo utilizzando un editor di testo adeguato come Sublime Text o TextMate (o come questo ).

Probabilmente non è il modo migliore per farlo, ma abbastanza buono per portare a termine il lavoro.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.