Creé una taxonomía de 'foro', usando estas reglas:
register_taxonomy(
'forum',
array('topic'),
array(
'public' => true,
'name' => _a('Forums'),
'singular_name' => _a('Forum'),
'show_ui' => true,
'show_in_nav_menus' => true,
'hierarchical' => true,
'labels' => array(
'name' => _a('Forums'),
'singular_name' => _a('Forum'),
'search_items' => _a('Search Forums'),
'popular_items' => _a('Popular Forums'),
'all_items' => _a('All Forums'),
'parent_item' => _a('Parent Forum'),
'parent_item_colon' => _a('Parent Forum:'),
'edit_item' => _a('Edit Forum'),
'update_item' => _a('Update Forum'),
'add_new_item' => _a('Add New Forum'),
'new_item_name' => _a('New Forum Name'),
),
'query_var' => true,
'rewrite' => array('slug' => 'forums', 'with_front' => false, 'hierarchical' => true),
)
);
En el front-end, las URL se ven así:
forums/general-discussion/sub-forum
¿Cómo puedo eliminar la babosa frontal ("foros")? Es decir, cambie las URL a:
general-discussion/sub-forum
Si paso un argumento slug vacío a register_taxonomy () funciona, pero eso causa problemas con los enlaces permanentes del tipo de publicación asociado con esta taxonomía
custom-post-types
custom-taxonomy
permalinks
Pony de un solo truco
fuente
fuente
'slug' => 'forums'
blanco simplemente eliminándolo por completo y solo teniendo'rewrite' => array('with_front' => false, 'hierarchical' => true)
? Creo que eso ha funcionado en el pasado para mí. También asegúrate de limpiar los enlaces permanentes.'slug' => ''
hace funcionar, pero luego las publicaciones que usan esta taxonomía generan 404%forum%
debe ser un segmento de nivel superiorRespuestas:
ACTUALIZAR
Desde que escribió este núcleo de WordPress ha agregado el
'do_parse_request'
gancho que permite que el enrutamiento de URL se maneje con elegancia y sin la necesidad de extender laWP
clase. Cubrí el tema en profundidad en mi charla de Atlanta WordCamp 2014 titulada " Enrutamiento de URL Hardcore " ; Las diapositivas están disponibles en el enlace.RESPUESTA ORIGINAL
El diseño de URL ha sido importante durante más de una década; Incluso escribí un blog al respecto hace varios años. Y aunque WordPress es la suma es un software brillante, desafortunadamente su sistema de reescritura de URL tiene poco cerebro (en mi humilde opinión, por supuesto. :) De todos modos, ¡me alegra ver a las personas preocupadas por el diseño de URL!
La respuesta que voy a proporcionar es un complemento que llamo
WP_Extended
que es una prueba de concepto para esta propuesta en Trac (tenga en cuenta que la propuesta comenzó como una cosa y evolucionó hacia otra, por lo que debe leer todo para ver dónde se dirigía)Básicamente, la idea es subclasificar la
WP
clase, anular elparse_request()
método y luego asignar la$wp
variable global con una instancia de la subclase. Luego, dentro deparse_request()
usted, inspeccione la ruta por segmento de ruta en lugar de usar una lista de expresiones regulares que deben coincidir con la URL en su totalidad.Entonces, para decirlo explícitamente, esta técnica inserta lógica frente a la
parse_request()
que verifica las coincidencias de URL a RegEx y, en cambio, primero busca coincidencias de términos de taxonomía, pero SOLO reemplazaparse_request()
y deja intacto todo el resto del sistema de enrutamiento URL de WordPress, incluyendo y especialmente el uso de la$query_vars
variable.Para su caso de uso, esta implementación solo compara segmentos de ruta URL con términos de taxonomía, ya que eso es todo lo que necesita. Esta implementación inspecciona los términos de la taxonomía que respetan las relaciones entre los términos padre-hijo y cuando encuentra una coincidencia, asigna la ruta URL (menos las barras inclinadas iniciales y finales) a
$wp->query_vars['category_name']
,$wp->query_vars['tag']
y$wp->query_vars['taxonomy']
&$wp->query_vars['term']
omite elparse_request()
método de laWP
clase.Por otro lado, si la ruta de URL no coincide con un término de una taxonomía que haya especificado, delega la lógica de enrutamiento de URL al sistema de reescritura de WordPress llamando al
parse_request()
método de laWP
clase.Para usar
WP_Extended
para su caso de uso, deberá llamar a laregister_url_route()
función desde elfunctions.php
archivo de su tema de la siguiente manera:Lo que aquí es el código fuente del complemento:
PS CAVEAT # 1
Aunque para un sitio determinado, creo que esta técnica funciona de manera brillante, pero NUNCA debería usarse para que un complemento se distribuya en WordPress.org para que otros lo usen . Si está en el núcleo de un paquete de software basado en WordPress, entonces eso podría estar bien. De lo contrario, esta técnica debería limitarse a mejorar el enrutamiento de URL para un sitio específico .
¿Por qué? Porque solo un complemento puede usar esta técnica . Si dos complementos intentan usarlo, entrarán en conflicto entre sí.
Además, esta estrategia se puede ampliar para manejar genéricamente prácticamente todos los patrones de casos de uso que puedan ser necesarios y eso es lo que pretendo implementar tan pronto como encuentre el tiempo libre o un cliente que pueda patrocinar el tiempo que me tomaría construir implementaciones completamente genéricas.
CUEVA # 2
Escribí esto para anular,
parse_request()
que es una función muy grande, y es muy posible que haya omitido una o dos propiedades del$wp
objeto global que debería haber establecido ... Entonces, si algo funciona mal, hágamelo saber y estaré feliz de investigue y revise la respuesta si es necesario.De todas formas...
fuente
'forum'
taxonomía sin embargo voy a revisarlo para trabajar el día de hoy ...'forums'
lugar de'forum'
? ¿Espera que las URL que enlazan con estas páginas cambien (en caso afirmativo, no es de extrañar, mi código no aborda la impresión de URL, solo el enrutamiento de URL)site/rootforum/
funciona, perosite/rootforum/subforum/
no funciona (error 404) ...Simple, de verdad.
Paso 1: deja de usar el parámetro de reescritura. Vamos a lanzar sus propias reescrituras.
Paso 2: establece reglas detalladas de página. Esto obliga a las páginas normales a tener sus propias reglas en lugar de ser un tema general en la parte inferior de la página.
Paso 3: Cree algunas reglas de reescritura para manejar sus casos de uso.
Paso 4: Forzar manualmente las reglas de descarga para que sucedan. La forma más fácil: vaya a configuración-> enlace permanente y haga clic en el botón Guardar. Prefiero esto sobre un método de activación de complemento para mi propio uso, ya que puedo forzar el vaciado de las reglas cada vez que cambio las cosas.
Entonces, código de tiempo:
¡Recuerde que después de agregar este código, debe tenerlo activo cuando elimine las reglas de enlace permanente (guardando la página en Configuración-> Enlaces permanentes)!
Después de haber vaciado las reglas y guardado en la base de datos, entonces / whatever debería ir a su foro = cualquier página de taxonomía.
Las reglas de reescritura realmente no son tan difíciles si entiendes las expresiones regulares. Utilizo este código para ayudarme cuando los depuro:
De esta manera, puedo ver las reglas actuales de un vistazo en mi página. Solo recuerde que, dada cualquier URL, el sistema comienza en la parte superior de las reglas y las sigue hasta encontrar una que coincida. Luego, la coincidencia se utiliza para reescribir la consulta en un conjunto? Key = value más normal. Esas claves se analizan en lo que va al objeto WP_Query. Simple.
Editar: Nota al margen, este método probablemente solo funcionará si su estructura de publicación personalizada normal comienza con algo que no es una atracción general, como% category% o algo así. Debe comenzar con una cadena estática o numérica, como% year%. Esto es para evitar que atrape su URL antes de que llegue a sus reglas.
fuente
No podrá hacer esto usando WP_Rewrite solo, ya que no puede distinguir entre las babosas de término y las babosas posteriores.
También debe conectarse a 'request' y evitar el 404, configurando la var de consulta posterior en lugar de la taxonomía.
Algo como esto:
Tenga en cuenta que la taxonomía debe definirse antes del tipo de publicación.
Este sería un buen momento para señalar que tener una taxonomía y un tipo de publicación con la misma consulta var es una mala idea.
Además, no podrá llegar a publicaciones que tengan la misma babosa que uno de los términos.
fuente
Echaría un vistazo al código del complemento de gatos de nivel superior:
http://fortes.com/projects/wordpress/top-level-cats/
Puede adaptarlo fácilmente para que esté buscando su babosa de taxonomía personalizada cambiando el
en la línea 74 a algo como:
fuente
Sugeriría que eche un vistazo al complemento de enlaces permanentes personalizados . No tengo tiempo para hacer la prueba en este momento, pero puede ayudar con su situación.
fuente
%forum%
, que es exactamente lo que estoy tratando de evitar ...Como estoy familiarizado con su otra pregunta , responderé con eso en mente.
No he probado esto en absoluto, pero podría funcionar si lo ejecuta una vez justo después de registrar todas las permastructs que desee:
Qué hace esto: elimina las reglas de reescritura generadas a partir de los enlaces permanentes de temas del flujo normal de la matriz de reglas y las vuelve a fusionar al final de la matriz. Esto evita que esas reglas interfieran con otras reglas de reescritura. A continuación, fuerza reglas de reescritura detalladas (cada página obtiene una regla individual con una expresión regular específica). Esto evita que las páginas interfieran con las reglas de su tema. Finalmente, ejecuta un vaciado forzado (asegúrese de que su archivo .htaccess sea grabable, de lo contrario, esto no funcionará) y guarda la gran variedad de reglas de reescritura muy complicadas.
fuente
Hay un complemento para esto .
Elimina el slug de tipo al agregar una regla específica para cada página de tipo de publicación personalizada.
fuente
No estoy seguro de si esto funcionará para las taxonomías, pero funcionó para los tipos de publicaciones personalizadas
Aunque no se ha actualizado durante 2 años, el siguiente complemento funcionó para mí: http://wordpress.org/plugins/remove-slug-from-custom-post-type/
FYI estoy ejecutando WP
3.9.1
con WP Tipos1.5.7
fuente
Use una barra como valor para la babosa ... 100% de trabajo
fuente
page
tipo de publicación sea 404.