Eliminar slug en URL de taxonomía
Me pregunto cómo puedo eliminar los slugs de algunas URLs. Estoy usando un tipo de entrada personalizada llamada exhibitors y algunas taxonomías para definir esos expositores (por ejemplo: featured-guests, publishers, etc.):
Actualmente tengo esto: http://thisurl.com/exhibitor_filters/featured-guests/
Me gustaría tener esto: http://thisurl.com/featured-guests/
He estado jugando con la reescritura / slug en WordPress, pero hasta ahora sin éxito.
¿Sugerencias?
¡Gracias!
-Edición-
Momentos divertidos, ahora estoy obteniendo errores 404 para todo lo que involucra tipos de entrada personalizados y términos de taxonomía. Voy a ver si al menos puedo hacer que esto deje de dar tantos errores primero... gracias por sus sugerencias generales, chicos.
Por defecto esto no es posible, y utilizando las APIs de registro de CPT y Taxonomías Personalizadas, no se puede hacer.
Y por una buena razón.
Todo tiene que ver con colisiones de permalinks y slugs, y para evitar ambigüedades. Ciertamente hay casos donde URLs únicas que nunca se solapan no son permitidas por el sistema por esta razón (falsos negativos).
Por lo tanto, recomiendo que decidas un reemplazo para 'exhibitor_filters'
como 'exhibitors'
, o 'filters'
y uses eso como tu slug en la opción rewrite al registrarlo.
Si realmente deseas hacerlo de la manera que propones, necesitarás añadir reglas de rewrite. Esto puede ser problemático, ya que corres el riesgo real de colisiones (¿cargamos la página 'about'
o el término exhibitor_filter 'about'
?), y el orden y prioridad de tus hooks jugarán un papel importante.
Por ejemplo:
function ex_rewrite( $wp_rewrite ) {
$feed_rules = array(
'(.+)' => 'index.php?exhibitor_filter='. $wp_rewrite->preg_index(1)
);
$wp_rewrite->rules = $wp_rewrite->rules + $feed_rules;
}
// refresca/flushea los permalinks en el panel de control si esto cambia de alguna manera
add_filter( 'generate_rewrite_rules', 'ex_rewrite' );
El código anterior funcionará para términos individuales, aunque necesitará modificaciones para URLs jerárquicas y taxonomías.
Coloca el código en el functions.php de tu tema, o en el plugin asociado a tu tema.
Advertencia: Deberás tener cuidado de no tener permalinks que colisionen, y necesitarás estar atento al orden en que se aplican las reglas. Usa el plugin monkeyman rewrite analyser para probar esto. Has sido advertido.

¿Esto aún funciona? ¿Necesita algún tipo de return
? No parece estar haciendo nada en mi caso.

sí, pero necesitas modificarlo para tu caso de uso específico, esta respuesta fue escrita para el OP (publicador original), por lo que un simple copiar y pegar no funcionará para ti a menos que tu tipo de publicación personalizada y taxonomías tengan nombres idénticos al del publicador original. Esta respuesta no es un copia-pega. También ten en cuenta las advertencias en la respuesta

Existe un complemento que te permitirá eliminar fácilmente el slug de la taxonomía con unos pocos clics. De todos modos, como dijo Tom, ten cuidado, por ejemplo, de no nombrar dos términos de taxonomías diferentes con el mismo nombre o todo se romperá.
La URL del complemento es http://wordpress.org/extend/plugins/wp-htaccess-control/

Deberías poder especificar esto desde la sección de enlaces permanentes. Puedes configurarlo mediante un enlace permanente personalizado, pero parece que una de las opciones predeterminadas "nombre de la entrada" debería funcionar para ti. Esto se puede encontrar en ajustes, enlaces permanentes en el backend de WordPress.

Encontré esa respuesta aquí
y usé el código en los comentarios de Jonathan Brinley.
Primero debes declarar tu taxonomía "exhibitor_filters"
, y luego tu CPT, estableciendo su slug como %exhibitor_filters%
.
Entonces todos tus CPTs y términos funcionarán correctamente, incluyendo los enlaces de los archivos de términos. En mi caso eliminé el slug del CPT de los permalinks usando %taxo% en el slug del CPT, y también funcionó excepto en el archivo de términos, que aún muestra el slug del CPT, pero en tu caso parece que es lo que deseas.
Pareces querer páginas de archivo, mostrando todas las publicaciones personalizadas en el filtro de expositores "featured-guests"
.
Buena suerte.

¿Hay alguna manera de pasar algo como un slug en blanco? Si lo dejo vacío, también obtengo errores del servidor.

¿Puedo ver el código completo, solo para asegurarme de que está implementado correctamente? Por lo que sé, si la función falla no debería generar un error 500.

register_taxonomy('exhibitor_filters','exhibitors', array( 'hierarchical' => true, 'label' => 'Tipo de Expositor', 'query_var' => true, 'rewrite' = > array( 'slug' => 'featured-guests', 'with_front' => false )
)
);
No creo que esto sea correcto. featured-guests es un término asociado con exhibitor_filters. Solo quiero que no muestre la parte de exhibitor_filters en un enlace. Tal vez eso no sea posible. Probablemente solo crearé una página de manera improvisada o algo así.

Noto que estás obteniendo errores 404 con tu estructura de enlaces permanentes ahora. ¿Has limpiado tu estructura de reescritura? http://wpengineer.com/2044/custom-post-type-and-permalink/

Sí. Nada aún. Eliminé mi base de datos y comencé desde cero. Resultado: 2 tipos de publicación se niegan a usar sus archivos y otros 2 siguen dando 404.
