Estoy escribiendo un complemento que crea una instancia de un tipo de publicación personalizada (entre otras cosas). Es un complemento multisitio y vive en el directorio mu-plugins .
¿Cuál es la mejor práctica para manejar flush_rewrite_rules () en esta situación? Para un complemento 'normal', lo haría en un gancho de activación, que no será posible para un complemento de uso obligatorio ya que esos ganchos no están disponibles.
Dado que se supone que es un evento "único" después de registrar el tipo de publicación personalizada, ¿tendría sentido hacer algo como esto en mi clase que registre el CPT:
private function check_flush_my_CPT() {
global $wp_rewrite;
if ( !get_option('my_plugin_firstrun') ) {
$wp_rewrite->init();
$wp_rewrite->flush_rules(true);
update_option('my_plugin_firstrun', 'yes');
}
}
public function register_my_CPT() {
// do all the CPT setup steps for the $args array...
register_post_type('my_CPT', $args);
$this->check_flush_my_CPT();
}
add_action( 'init', array(&$this, 'register_my_CPT' ) );
Entonces, el registro de CPT ocurre en cada acción 'init', pero si tengo este derecho, la descarga de reglas de reescritura solo ocurre una vez. Nunca .
¿Estoy en el camino correcto?
(editar): acabo de probarlo; mi CPT está dando un error 404 no encontrado, por lo que las reglas de reescritura no funcionan :-(
(editar # 2): Probé la solución para acceder a la variable global como se muestra en esta pregunta: ¿Cómo vaciar de forma confiable las reglas de reescritura en sitios múltiples? - Actualizaré mi ejemplo de código anterior para mostrar esto. Lamentablemente, todavía recibo un error 404 al intentar cargar un CPT. Veo que las reglas de reescritura se almacenan en la base de datos, simplemente parece que no se están utilizando. Estoy perdido.
Respuestas:
La
flush_rewrite_rules
función es confiable en algunos contextos, como un tema o un complemento basado en ganchos, pero no estoy seguro de si funciona para unmu-plugin
Mi declaración se basa en el hecho de que WordPress se inicializa de esta manera:
wp-settings.php
archivodo_action( 'muplugins_loaded' );
gancho, aquí se inicializa tu complemento$GLOBALS['wp_rewrite'] = new WP_Rewrite();
aquí el métodoflush_rules
se inicializa y está disponible a partir de ahorado_action( 'setup_theme' );
se llama y apuesto todo mi dinero a que en este ganchoflush_rewrite_rules
funcionará¿Solución?
Personalmente, considero confiable la eliminación de la opción rewrite_rules.
o
Siempre que a WordPress le falte, los
rewrite_rules
reconstruirá, esto es también lo que hace elflush_rules
método.Hay puntos en el flujo de ejecución de WordPress donde funciones como esta no están disponibles. incluso en el núcleo de WordPress encontré esta declaración
El único problema sería el rendimiento, no haga esto en cada solicitud porque es un proceso difícil reconstruirlos. Como puedo ver, desea eliminarlos solo en la primera llamada y esto es algo bueno.
PD: No soy tan fanático de la autopromoción, pero también escribí un artículo sobre esto hace mucho tiempo y creo que todavía lo defiende.
fuente
Si su plugin mu tiene opciones, pondría el rubor justo después de actualizarlas:
fuente