¿No pueden las taxonomías personalizadas tener los mismos términos (babosas) que las categorías?

8

Sabía que no es posible tener los mismos términos (babosas de términos) bajo categorías y etiquetas, pero sorprendentemente, como me di cuenta hoy, ese es el caso también con las taxonomías personalizadas.

Entonces, por ejemplo, si mi sitio tiene una categoría llamada Linux (linux)y quiero crear un término de taxonomía personalizado llamado 'Linux', se vería algo así Linux (linux-2), es decir, las babosas deben ser diferentes.

Y si intento cambiar el nombre de la babosa a linux, recibo el error "La babosa 'linux' ya está en uso por otro término" .

¿Es posible tener los mismos términos en categorías / etiquetas y taxonomías personalizadas (sin causar estragos)?


¿Cómo replicar el problema?

  1. Crea 3-5 nuevas publicaciones. Cree una nueva categoría y etiqueta y asígnelas a esas publicaciones (solo con fines de prueba).

  2. Guardar configuración de enlace permanente.

  3. cree dos nuevos términos bajo la taxonomía personalizada con el mismo nombre y ficha que la categoría y etiqueta que creó anteriormente, y asígnelos a una nueva publicación bajo un tipo de publicación personalizada.

  4. Eliminar las taxonomías personalizadas.

  5. Intente recrearlos y ahora obtendrá el error: "El slug 'XXX' ya está en uso por otro término".

A veces eso replicaría el problema, a veces no.

Pero...

Si puede crear una categoría (o etiqueta) y una taxonomía personalizada con el mismo nombre y babosa, hágalo. Luego, cambie el nombre de uno de ellos y notará que tanto la categoría (o etiqueta) como la taxonomía personalizada cambian de nombre.

soy yo
fuente
Hmm, esto no me pasa. ¿Puedes pegar tu código de taxonomía personalizado?
Matthew Boynes
@MatthewBoynes Oh, así es como se ve: gist.github.com/anonymous/5267905cccae4d52cc1b
its_me
Estoy usando la última versión nocturna de WordPress y su código, textualmente, no encuentra este error. Esto es lo que debe hacer a continuación: (1) En una instalación limpia de WordPress 3.6.1, agregue solo su tipo de publicación y código de taxonomía a un tema limpio. Use Twenty Thirteen o Toolbox o algo así. Si funciona, sabes que el problema no está en WP sino en un complemento o tu tema. Si ocurre, intente lo mismo con la última versión nocturna de 3.7. Si funciona, entonces no tiene que preocuparse porque 3.7 se lanzará probablemente la próxima semana. Si todavía ocurre, proporcione todo el código necesario para replicarlo.
Matthew Boynes
@MatthewBoynes De acuerdo. Lo probaré y veré. Por cierto, ya estoy en 3.7 estable, lanzado en algún momento ayer / hoy.
its_me
Ah, tienes razón, de alguna manera me perdí eso!
Matthew Boynes

Respuestas:

9

Resulta que este es un error en el núcleo. Estaba a punto de denunciarlo, pero descubrí que ha estado allí, como años, y se aplica también a las taxonomías personalizadas. Ver boletos: # 5809 , # 21950 y # 22023 .

Si todo sale según lo planeado, se arreglará en 3.8 3.9 4.14.2. ACTUALIZACIÓN: ¡ Sí, arreglado !


Mientras tanto, aquí hay un plan para superar el problema: establecer automáticamente un sufijo de babosa personalizado para todos los términos recién creados bajo una taxonomía:

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

    }
}

Esto no es retrospectivo, es decir, las babosas de solo los nuevos términos bajo la taxonomía ('libros' en nuestro caso) se crean con nuestro sufijo personalizado ('-books').

Para establecer un prefijo, cambie esta línea en la función:

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

a algo como esto:

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

Y una vez que se corrige el error ...

Volcar la base de datos y hacer una búsqueda de expresiones regulares y reemplazar usando un editor de texto adecuado como Sublime Text o TextMate (o como este ).

Probablemente no sea la mejor manera de hacerlo, pero es lo suficientemente bueno para hacer el trabajo.

soy yo
fuente