¿Por qué todos enganchan add_rewrite_rule en init

4

Todos los ejemplos que encuentro al agregar reglas de rewrtie se ven así

function addsomerule() {
  add_rewrite_rule(some regex,some parse result);
}

add_action('init','addsomerule');

Esto no computa para mí. como las adiciones a las reglas de reescritura de este tipo se ignoran si la opción rewrite_rule no está vacía (es decir, no hubo reglas de reescritura vacías en este momento), ¿cuál es el punto de engancharlas?

Parece que conectarlo a admin_init tiene mucho más sentido que escribir en la base de datos y, por lo tanto, reescribir el vaciado, solo debería ocurrir en el lado del administrador.

¿No hay una acción más lógica para usar esta función o es un inicio o ir con el filtro de nivel inferior?

    
pregunta Mark Kaplun 05.11.2015 - 15:03

1 respuesta

5

Tiene razón al decir que sin reglas de lavado, add_rewrite_rule() no funciona, y la razón es que WordPress recupera las reglas de la base de datos, y add_rewrite_rule() no agrega la regla a la base de datos.

Sin embargo, no es posible usar admin_init y la razón es que admin_init es demasiado tarde.

WordPress a veces llama a flush_rewrite_rules() en las pantallas de administración antes de que se desencadene admin_init (por ejemplo, aquí ), y para asegurarse de que la regla se agregue cuando WordPress llame a flush_rewrite_rules() , deberá usar init (o tal vez wp_loaded ).

Algo como esto podría funcionar:

function addsomerule() {
  if ( is_admin() ) add_rewrite_rule(some regex,some parse result);
}

add_action( 'init','addsomerule' );

Asegura que la regla se agregue solo durante las solicitudes de administración.

Sin embargo, la declaración if que llama a una función tiene un costo (pequeño) en términos de rendimiento, y considerando que el add_rewrite_rule no es muy costoso (solo escribe un valor en una matriz global, y no golpear db), entonces probablemente no vale la pena agregar esa condición.

Además, no siempre tiene control sobre todos los códigos que usa su sitio. Si el complemento algunos llama a flush_rewrite_rules() en las solicitudes de frontend, entonces su regla se pierde porque se agregó solo en el backend.

Por todas estas razones, agregar las reglas de reescritura en init sin ningún otro chequeo es probablemente lo correcto: evita cualquier problema y los pequeños costos que agrega en las solicitudes de interfaz de usuario son bastante irrelevantes y se pierden en el arranque de WordPress tiempo.

    
respondido por el gmazzap 05.11.2015 - 17:00

Lea otras preguntas en las etiquetas