¿Cómo funciona el enrutamiento en WordPress?

13

¿Cómo funciona el enrutamiento wp core? Me está costando entender ... En MVC, su URL se ve como mycontroller / myaction que se asigna a MyController-> myaction ()

En drupal, es index.php? Q = mycustomerpath / hello que se puede asignar a cualquier función que le guste y que devuelva un contenido "temático" en el diseño de su tema.

Pero en wp, no tengo idea de cómo se hacen las cosas ... es? P = 1 entonces? Producto = 1 ... He buscado documentación del flujo de enrutamiento pero no puedo encontrar ninguna (google solo devuelve artículos personalizados rutas) ... quiero entender los fundamentos del enrutamiento central primero ...

si hombre
fuente
cavando en el código, veo en cada solicitud que llama query_posts? ¿Por qué necesita consultar publicaciones cada vez? ¿No hay casos en los que realmente no quieres mostrar publicaciones?
sí,
1
Los contenidos se guardan como publicaciones en WP. Entonces, cuando necesita mostrar contenido, debe consultarlo
Sisir
Puedo sugerirte que leas sobre "el bucle", que es el concepto que debes entender para saber cómo funciona WordPress. Essential "the loop" muestra una matriz de publicaciones que es el resultado de query_posts. Para las solicitudes de URL que no son de administrador, WP está diseñado para mostrar solo publicaciones y se necesita una programación personalizada para mostrar algo además de una publicación. Las solicitudes de URL de administrador son diferentes y no utilizan "el bucle" y muestran cosas que no son publicaciones.
ok, pero este enfoque es un poco extraño y no muy flexible
tbh
digamos que quiero mostrar un formulario de contacto ... ¿necesito poner mi html en un tipo de contenido de página? Todavía estoy tratando de encontrar dónde poner la lógica para el envío del formulario ... (en el tema page.php? Enfoque muy feo)
síman

Respuestas:

20

En WordPress, las URL no se asignan a rutas. Se asignan a consultas de bases de datos.

Cuando utiliza WordPress en el modo de enlaces permanentes "predeterminado", tiene un conjunto de variables en la consulta de URL principal, como? P = 1 o? Página = 234 y así sucesivamente. También hay? S = search y muchos otros.

Si utiliza los enlaces permanentes "bonitos", se crea un gran conjunto de reglas llamadas "reglas de reescritura" que mapea directamente varios patrones de URL en este mismo conjunto de parámetros de URL. Entonces, una URL como / 2014/04/12 / example se correlacionaría con? Year = 2014 & month = 04 & day = 12 & postname = example o similar. Por lo tanto, lo siguiente también se aplica a estos, después de realizar esta asignación.

Estas variables controlan esencialmente la instancia principal de la clase WP_Query. La clase WP_Query contiene toda la información que genera la consulta de la base de datos para obtener las "publicaciones" de la base de datos. Los diversos parámetros que se le pasan controlan qué tipo de consulta crea y qué datos obtiene.

Mira, todo lo que WordPress puede mostrar es esencialmente una "publicación". Un blog es una serie de publicaciones en orden inverso en el tiempo. Una "página" es una publicación estática con un nombre definido. Un "tipo de publicación personalizada" es exactamente lo que parece, una "publicación" con un tipo personalizado que usted define. Todas las consultas principales para mostrar cualquier cosa en WordPress obtienen un subconjunto de publicaciones de la tabla wp_posts.

El WP_Query es lo que hace eso. Y los parámetros de la URL se envían directamente a esa consulta principal y se usan allí.

El tema luego determina qué plantilla usar en función de lo que devuelve la consulta. Si solicitó / category / example, entonces eso se convierte en? Category_name = example, lo que significa que la matriz principal $ wp_query-> query_vars obtendrá esa información, y WP_Query extraerá las últimas X publicaciones para la categoría "ejemplo", y establecerá su bandera is_category en true.

El cargador de plantillas se ejecutará después de esto, ver que is_category () devuelve verdadero y decide elegir la plantilla de categoría, por lo que buscará category-example.php y volverá a category.php y así sucesivamente, de acuerdo con la Plantilla Jerarquía.

Entonces, la pregunta si desea cambiar el funcionamiento de las URL es simple: ¿Desea cambiar las URL o a qué están asignadas? Debido a que las URL no se asignan a funciones, se asignan a parámetros que controlan la consulta. Si desea que la URL ajuste esa consulta principal, entonces es un proceso ligeramente diferente que si desea que una URL especial ejecute algún otro código especial.

Y para responder su pregunta específica en los comentarios: "¿no hay casos en los que realmente no desea mostrar publicaciones?" No no hay. Todo es un post. Todo el contenido se almacena en publicaciones. Si desea almacenar contenido en otro lugar y ser diferente, puede hacerlo, pero es más difícil porque, sinceramente, generalmente no es necesario. Si tiene contenido especial, haga un tipo de publicación personalizado, almacene su contenido como una publicación con ese tipo, asigne un patrón de URL a él. Fácil.

Otón
fuente
Entiendo que todo debe estar representado en una publicación (a través de tipos de publicación personalizados, etc.) muy similar a los tipos personalizados en drupal 6 ... pero ¿afecta el rendimiento tener una sola tabla de publicaciones para almacenar cada contenido del sitio? drupal 7 lo resolvió introduciendo el tipo de entidad para que no tenga que crear un tipo personalizado y almacenar todo en la tabla de nodos, sino en su propia tabla de entidades que aún puede aprovechar el marco de drupal. Espero que WordPress presente tal enfoque en el futuro. Gracias por la explicación detallada.
sí,
Supongo que si quiero asignar una url a mi propia función / tema, ¿me ayudaría el enrutador wp?
sí,
Agregar un sistema de enrutamiento completo generalmente no es necesario. Hay formas mas simples. La base de WordPress es mostrar el contenido generado por el usuario, que se almacena en la tabla de publicaciones. Si desea mostrar contenido que no es generado por el usuario, generalmente lo hace en el tema o en un complemento. Hay cientos (miles) de ganchos y filtros de acción y otras formas para que el código anule varias partes del proceso a medida que se genera la página. Y con cosas como códigos cortos, insertar HTML personalizado en el contenido es relativamente fácil.
Otto
¿Cómo agrego html / php personalizado en un tipo de publicación que creé? sin tener que modificar el single.php del tema o crear un single-mycustompost.php (no es un enfoque muy portátil)
yeahman
66
después de más de 1 año trabajando con wordpress ahora ... todavía no estoy convencido de ello ... el marco no es elegante y bastante feo ... Funciona como un simple blog pero si quieres desarrollar otros tipos de sitios web. Es como hackear WordPress para hacer algo que no estaba destinado a hacer.
Sí hombre