plugin-development – Estrategias para implementar la carga selectiva de complementos

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 .

Leave a Comment

Your email address will not be published. Required fields are marked *

web tasarım