Ich richte für einige meiner Fakultätsmitglieder ein untergeordnetes Thema ein. Als Teil des Themas möchte ich, dass eine Handvoll Plugins zum Zeitpunkt der Aktivierung des Themas aktiviert werden. Also habe ich natürlich die Aktion after_setup_theme verwendet und meine Setup-Funktion aufgerufen. Es funktioniert großartig, außer es läuft auf JEDER Anfrage (admin und sonst). Ich habe dies bewiesen, indem ich dies am Ende der Setup-Funktion hinzugefügt habe:
echo '<script type="text/javascript">alert("This action was run")</script>';
Als Ergebnis erhalten Sie eine Javascript-Warnung für jede Administratoranforderung und jede Front-End-Anforderung (ich habe ein Netzwerk-Setup, daher wird die Funktion auf Websites, auf denen dieses Thema nicht aktiv ist, offensichtlich nicht ausgeführt).
Die Frage ist also, ist das ein Fehler? Mache ich irgendwie etwas falsch Hier ist der vollständige Code, den ich verwende:
add_action( 'after_setup_theme', 'fwp_setup' );
function fwp_setup(){
// -- Unrelated code remove for the sake of brevity
require_once($_SERVER['DOCUMENT_ROOT'].'/wp-admin/includes/plugin.php');
activate_plugin('enable-media-replace/enable-media-replace.php');
activate_plugin('seo-image/seo-friendly-images.php');
activate_plugin('w3-total-cache/w3-total-cache.php');
echo '<script type="text/javascript">alert("This action was run")</script>';
}
Jeder Einblick wäre sehr dankbar!
quelle
after_switch_theme
macht genau das, was ich hier beabsichtigt habe. Es wird ausgelöst, nachdem das Thema auf Ihr Thema umgestellt wurde. Eine der unten genannten Lösungen verwendetswitch_theme
. Dies führt nicht zu den gewünschten Ergebnissen, da dies nur beim Wechseln von Ihrem Thema geschieht. Verweisen Sie auf diesen Trac KommentarAntworten:
LÖSUNG:
after_switch_theme
macht genau das, was ich hier beabsichtigt habe. Es wird ausgelöst, nachdem das Thema auf Ihr Thema umgestellt wurde. Eine der unten genannten Lösungen verwendetswitch_theme
. Dies führt nicht zu den gewünschten Ergebnissen, da dies nur beim Wechseln von Ihrem Thema geschieht.Hier ist ein Artikel, den ich als Referenz gefunden habe: http://core.trac.wordpress.org/ticket/7795#comment:29
Hier ist mein geänderter Code
quelle
Die
after_setup_theme
Aktion soll bei jedem WordPress-Ladevorgang ausgelöst werden. Es ist einfach Teil des Prozesses, in dem WordPress das Vorlagensystem aufruft, die verschiedenen Setup-Parameter für das Theme ermittelt und anschließend weiterarbeitet, z. B. die richtige Vorlage für die Anzeige usw.Mit anderen Worten, das
after_setup_theme
repräsentiert den Punkt, an dem WordPress das aktuelle Thema einrichtet, nicht den Punkt, an dem der Administrator das aktuelle Thema aktiviert und / oder konfiguriert .Was Sie suchen, ist ein Theme- Aktivierungs- Hook, der derzeit aber nicht verfügbar ist geprüft / entwickelt wird .
quelle
init !== activation
. Normalerweise nennt man__construct()
Funktion in PHP auch eineinit
Funktion. Das heißt: Initialisieren Sie die Instanz.Leider gibt es keinen Theme-Aktivierungs-Hook. Diese Frage bietet jedoch eine Lösung dafür.
Verwenden Sie einfach den 'Theme Activation Hook', um die Plug-Ins zu aktivieren.
Eine bessere Lösung ist diese . Beide verwenden im Wesentlichen die
switch_theme
Haken.Gemäß den OP-Kommentaren und dem verknüpften Trac-Ticket -
after_switch_theme
ist der Haken erforderlich.Dies übergibt den Namen des alten Themas als Argument. Wenn dies jedoch in Ihrem ist
functions.php
(was es sein sollte ...), wird der Rückruf nur ausgelöst, wenn Ihr Thema aktiviert wird .In ähnlicher Weise wird das Hinzufügen eines Rückrufs zu
switch_theme
nur aufgerufen, wenn Ihr Thema deaktiviert ist.quelle
switch_theme
funktionierte erst nach Deaktivierung des Themas. Hat aberafter_switch_theme
perfekt funktioniert.Eine bessere Lösung könnte sein, zu verwenden das Plugin-Aktivierungsskript von Thomas Griffin . Dadurch werden Benutzer aufgefordert, Plugins Ihrer Wahl zu installieren, wenn das Thema verwendet wird. Ich denke, dies ist eine großartige Möglichkeit, das Plugin vom Thema zu trennen und es trotzdem zu nutzen.
Überprüfen Sie in Ihrem Thema, ob das Plugin aktiv ist, bevor Sie seine Funktionen verwenden. Dies ermöglicht den Benutzern mehr Auswahl und Kontrolle.
Sie können das Aktivierungsskript einfach mit Knapsack einrichten .
quelle
Ihre beste Lösung wäre jetzt,
switch_theme
Hook zu verwenden und das übergebene Argument '$ theme' zu filtern, um zu sehen, ob es das aktuelle ist, und wenn nicht, zurückzukehren.quelle