Eliminar la base de taxonomía o término de la URL

26 jun 2011, 08:52:17
Vistas: 19K
Votos: 10

Sé que hay muchas publicaciones sobre esto aquí, pero NINGUNA ha resuelto mi problema.

Estoy trabajando con un tema personalizado que tiene un tipo de categoría personalizada (llamada messagetypes). Tengo una categoría creada llamada media. Este tema está configurado para que pueda agregar un elemento de menú que, al hacer clic, muestre todos los elementos etiquetados como media, pero la URL de la página es entonces misitio.com/messagetypes/media. Quiero eliminar messagetypes de la URL y que solo sea misitio.com/media.

Lo más cerca que he estado es cuando agrego en las funciones de categoría personalizada, donde

register_taxonomy( 'messagetypes', ...

se llama con

'rewrite' => array( 'slug' => ''),

Cuando hago esto, obtengo el resultado deseado para esta página, pero todos mis otros enlaces de páginas se rompen (usando enlaces permanentes).

También intenté agregar al array de rewrite

'with_front' => false

pero eso tampoco funcionó.

Cualquier ayuda o idea sería genial. He perdido demasiadas horas en esto y me está volviendo loco.

Gracias.

0
Todas las respuestas a la pregunta 1
1
14

Cuando hago esto, obtengo el resultado deseado de esta página, pero todos mis otros enlaces de páginas se rompen (usando enlaces permanentes).

Porque, simplemente, WordPress no tiene idea de que estás solicitando una página. Está haciendo lo que le indicaste:

Para todas las URLs que parezcan http://example.com/X, busca publicaciones con messagetype igual a X.

Por eso necesitas el 'identificador' ahí; para que pueda distinguir la diferencia entre solicitudes de páginas, archivos, categorías...

Si realmente quieres esta funcionalidad, agregar reglas de reescritura detalladas al principio del mapa de reescritura sería el camino a seguir:

add_rewrite_rule( 'media/?$', 'index.php?messagetypes=media', 'top' );

Si tienes muchos messagetypes, quizás quieras engancharte a la creación y eliminación de términos y actualizar dinámicamente y limpiar las reglas de reescritura.

De lo contrario, repite el ejemplo para cada término en tu functions.php, luego limpia tus enlaces permanentes (simplemente visita la página de opciones de enlaces permanentes en el admin).

Una última cosa, devuelve tu llamada register_taxonomy 'a la normalidad', es decir, omite el argumento rewrite, y usa el filtro term_link para intercambiar nosotros mismos el enlace permanente personalizado:

function __custom_messagetypes_link( $link, $term, $taxonomy )
{
    if ( $taxonomy !== 'messagetypes' )
        return $link;

    return str_replace( 'messagetypes/', '', $link );
}
add_filter( 'term_link', '__custom_messagetypes_link', 10, 3 );
26 jun 2011 19:37:32
Comentarios

GRACIAS. De verdad. Lo hiciste perfecto y ahora también tengo una comprensión mucho mejor de lo que estaba pasando.

danstever danstever
27 jun 2011 05:02:50