it-swarm.com.de

after_setup_theme läuft immer

Ich richte gerade ein untergeordnetes Thema für einige meiner Fakultätsmitglieder ein. Als Teil des Themas möchte ich, dass zum Zeitpunkt der Aktivierung des Themas eine Handvoll Plugins aktiviert werden. Also habe ich natürlich die after_setup_theme-Aktion verwendet und meine Setup-Funktion aufgerufen. Es funktioniert großartig, außer es wird auf JEDE Anfrage ausgeführt (admin und anders). Ich habe dies bewiesen, indem ich dies am Ende der Setup-Funktion hinzufügte:

echo '<script type="text/javascript">alert("This action was run")</script>';

Als Ergebnis erhalten Sie eine Javascript-Warnung bei jeder Administratoranforderung und jeder Front-End-Anforderung (Ich habe ein Netzwerk-Setup, also offensichtlich auf Websites, auf denen dieses Thema nicht aktiv ist, wird die Funktion 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>';
}

Jede Einsicht wäre sehr dankbar!

11
Aaron Wagner

LÖSUNG: after_switch_theme macht genau das, was ich hier beabsichtigt habe. Es wird ausgelöst, nachdem das Thema auf Ihr Thema umgeschaltet wurde. Eine der unten genannten Lösungen verwendet switch_theme. Dies führt nicht zu den gewünschten Ergebnissen, da dies nur geschieht, wenn Sie Ihr Thema verlassen.

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

add_action( 'after_switch_theme', 'fwp_theme_setup' );
function fwp_theme_setup(){ 
    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');
}
8
Aaron Wagner

Die after_setup_theme Aktion ist beabsichtigt , um bei jedem Laden von WordPress ausgelöst zu werden. Es ist einfach Teil des Prozesses, in dem WordPress das Vorlagensystem aufruft, die verschiedenen Setup-Parameter für das Design festlegt und dann mit der anschließenden Verarbeitung fortfährt, z. B. Festlegen der richtigen anzuzeigenden Vorlage usw.

Mit anderen Worten, der after_setup_theme repräsentiert den Punkt, an dem WordPress das aktuelle Theme einrichtet, nicht den Punkt, an dem der Administrator aktiviert und/oder konfiguriert das aktuelle Theme.

Was Sie suchen, ist ein Theme Aktivierung Hook, das derzeit nicht verfügbar ist, aber wird geprüft/Entwicklung .

5
Chip Bennett

Leider gibt es keinen Theme-Aktivierungs-Haken. Ein diese Frage bietet jedoch eine Umgehungsmöglichkeit dafür.

Verwenden Sie einfach den "Theme Activation Hook", um die Plug-Ins zu aktivieren.

Eine bessere Lösung, aus der gleichen Richtung ist diese . Beide verwenden im Wesentlichen den Hook switch_theme.


Gemäß den OP-Kommentaren und dem verknüpften Trac-Ticket - after_switch_theme ist der Hook erforderlich.

Dies übergibt den Namen des alten Themas als Argument. Befindet sich dies jedoch in Ihrem functions.php (der es sein sollte ...), wird der Rückruf nur ausgelöst, wenn Ihr Thema aktiviert ist .

add_action( 'after_switch_theme', 'wpse50298_setup' );
function wpse50298_setup($theme_switching_from){
    // Your theme is being activated
}

In ähnlicher Weise wird ein Rückruf zu switch_theme nur aufgerufen, wenn Ihr Design deaktiviert ist.

add_action( 'switch_theme', 'wpse50298_deactivate' );
function wpse50298_deactivate($theme_switching_to){
    // Your theme is being deactivated
}
4
Stephen Harris

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ückzugeben.

function nw_update_network($theme) {
   if ($theme !== 'my_theme_name') return;

   // Your code here
}

add_action('switch_theme', 'nw_update_network');
0
numediaweb

Eine bessere Lösung könnte sein, das Aktivierungsskript für das Plugin von Thomas Griffin zu verwenden. 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 innerhalb Ihres Themas, 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.

0
Jeff Sebring