Pregunta:
Estoy tratando de encontrar algún tipo de mecanismo para cargar complementos a pedido, según la URL de la página, para mejorar el rendimiento.
Mi principal preocupación es que tengo algunas llamadas admin-ajax.php que son recurrentes mientras el usuario está activo en la página. Intenté perfilar estas llamadas y descubrí que la mayoría de los complementos cargados para la llamada ajax eran innecesarios.
Si bien podría usar is_admin()
para identificar una llamada ajax, deseo dejar intactos WordPress y el código del complemento. Además, is_admin()
no diferencia entre una llamada ajax y un panel de administración.
He estado investigando el procedimiento de carga del complemento. Solo vi 'muplugins_loaded'
, 'plugins_loaded'
, sin filtros para aprovechar el proceso de carga. wp_get_active_and_valid_plugins
y parece que la única forma de cambiar la carga del complemento es update_option('active_plugins')
explícitamente, que no es una opción viable. Otras cosas están codificadas de forma rígida.
(Me gustaría mencionar que este complemento http://wordpress.org/extend/plugins/selective-loading/ usa el método update_option
, que en mi opinión solo es adecuado en un entorno que no sea ajax, o de lo contrario, la opción cambia no sería atómico.)
Me pregunto si todavía había alguna forma de implementar la carga selectiva de complementos.
Respuesta:
Filtro option_active_plugins
. Puede cambiar el resultado de get_option()
aquí sin cambiar realmente la base de datos.
if ( defined( 'DOING_AJAX' ) && DOING_AJAX )
add_filter( 'option_active_plugins', 'disable_plugins_temporary' );
function disable_plugins_temporary( $plugins )
{
// unset plugins you don't need, then
return $plugins;
}
Fondo
wp_get_active_and_valid_plugins()
llama a get_option( 'active_plugins', array() )
para obtener los complementos activos. En get_option( $option, $default = false )
encontramos este filtro:
return apply_filters( 'option_' . $option, maybe_unserialize( $value ) );
Entonces, el nombre resultante para nuestro filtro es option_active_plugins
.