Strategien zur Implementierung des selektiven Ladens von Plugins

7

Ich versuche, einen Mechanismus zu finden, mit dem Plugins je nach Seiten-URL bei Bedarf geladen werden können, um die Leistung zu verbessern.

Mein Hauptanliegen ist, dass ich einige admin-ajax.php-Aufrufe habe, die wiederholt werden, während der Benutzer auf der Seite aktiv ist. Ich habe versucht, diese Aufrufe zu profilieren, und festgestellt, dass die meisten für den Ajax-Aufruf geladenen Plugins nicht erforderlich waren.

Während ich is_admin()einen Ajax-Anruf identifizieren könnte , möchte ich WordPress und den Plugin-Code intakt lassen. Außerdem is_admin()wird nicht zwischen einem Ajax-Anruf und einem Admin-Panel unterschieden.

Ich habe mich mit dem Laden des Plugins befasst. Ich sah nur 'muplugins_loaded', 'plugins_loaded'Aktionen, keine Filter zu tippen in den Ladeprozess. Ich habe es überprüft wp_get_active_and_valid_pluginsund es scheint, dass die einzige Möglichkeit, das Laden von Plugins zu ändern, update_option('active_plugins')explizit ist, was keine praktikable Option ist. Andere Dinge sind fest codiert.

(Ich möchte erwähnen, dass dieses Plugin http://wordpress.org/extend/plugins/selective-loading/ die update_optionMethode verwendet, die meiner Meinung nach nur in einer Nicht-Ajax-Umgebung geeignet ist, sonst würde sich die Option nicht ändern sei nicht atomar.)

Ich frage mich, ob es noch eine Möglichkeit gab, das selektive Laden von Plugins zu implementieren.

Er Shiming
quelle
Geben Sie an, dass das Plugin zum selektiven Laden das Laden der URLs auf die Site basiert, die auch mit AJAX verwendet werden kann. Dies kann jedoch falsch sein.
user2108948

Antworten:

7

Filter option_active_plugins. Sie können das Ergebnis von get_option()hier ändern , ohne die Datenbank tatsächlich zu ändern.

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;
}

Hintergrund

wp_get_active_and_valid_plugins()ruft get_option( 'active_plugins', array() )auf, um die aktiven Plugins zu erhalten. In get_option( $option, $default = false )finden wir diesen Filter:

return apply_filters( 'option_' . $option, maybe_unserialize( $value ) );

Der resultierende Name für unseren Filter lautet also option_active_plugins.

Fuxia
quelle
0

Ich bin nicht sicher, ob dies Ihnen bei Ihrem Ajax-Aufruf helfen wird, aber Plugin Organizer ist ein gut unterstütztes Plugin, das das selektive Laden anderer Plugins basierend auf der URL ermöglicht. Es funktioniert gut auf meiner Website.

lflier
quelle