after_setup_themeは常に実行されます


11

一部の教員向けに子テーマを設定しています。テーマの一部として、テーマがアクティブ化されたときにいくつかのプラグインをアクティブ化してください。したがって、当然のことながら、私はafter_setup_themeアクションを使用して、セットアップ関数を呼び出しました。EVERYリクエスト(管理者など)で実行されることを除いて、それは素晴らしい働きをします。これをセットアップ関数の最後に追加することでこれを証明しました:

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

そしてその結果、すべての管理リクエストとすべてのフロントエンドリクエストでJavaScriptアラートを取得します(私はネットワークを設定しているので、このテーマがアクティブでないサイトでは明らかに機能を実行していません)。

だから問題は、これはバグですか?どういうわけか私は何か間違ったことをしていますか?これが私が使用している完全なコードです:

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

どんな洞察もいただければ幸いです!


解決策: after_switch_theme私がここで意図したことを正確に実行します。テーマがテーマに切り替えられた後に発生します。下記のソリューションの1つはを使用していswitch_themeます。これは、テーマから離れたときにのみ発生するため、望ましい結果にはなりません。このTracコメントを参照
Aaron Wagner

質問へのコメントではなく、回答として投稿してください。:)
チップベネット

2
謝罪。それはまだ私にはできません。少し答えとして追加します。
アーロンワーグナー

回答:


8

解決策:after_switch_theme私がここで意図したことを正確に実行します。テーマがテーマに切り替えられた後に発生します。下記のソリューションの1つはを使用していswitch_themeます。これは、テーマから離れたときにのみ発生するため、望ましい結果にはなりません。

ここに私が参照として見つけた記事があります:http : //core.trac.wordpress.org/ticket/7795#comment : 29

これが私の変更されたコードです

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

5

このafter_setup_themeアクションは、WordPressがロードされるたびに起動すること目的としています。これは、WordPressがテンプレートシステムを呼び出し、テーマのさまざまな設定パラメーターを決定し、その後、表示する正しいテンプレートを決定するなど、その後の処理に進むプロセスの一部にすぎません。

換言すれば、after_setup_themeその時点で表すワードプレスは、現在のテーマ、設定していない点で、管理者 が作動および/または構成は、現在のテーマ。

お探しのテーマアクティベーションフックは、現在利用できませんが、検討/開発中です。


コーデックスエントリリンクは、そのときひどく誤解を招くものです。「このフックはテーマの初期化中に呼び出されます」と書かれています。つまり、私には、フックがアクティブになったときに呼び出される必要があるということです。あなたの言っていることが理解できます。ひどく誤解を招く。
アーロンワグナー

5
init !== activation。通常__construct()、phpのinit関数は関数も呼び出します。つまり、インスタンスを初期化します。
カイザー

tracチケットは7歳で、修正されないようです。
numediaweb 2015年

4

残念ながら、テーマアクティベーションフックはありません。ただし、この質問はそのための回避策を提供します。

「テーマアクティベーションフック」を使用してプラグインをアクティベートするだけです。

同じ静脈に沿ったより良い解決策はこれです。どちらも基本的にswitch_themeフックを使用します。


OPのコメントとリンクされたtracチケットに従って- after_switch_theme必要なフックです。

これは、古いテーマの名前を引数として渡します。ただし、これがfunctions.php(あるはずです...)内にある場合、テーマがアクティブ化されているときにのみコールバックが発生します

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

同様に、コールバックを追加するswitch_themeと、テーマが非アクティブ化されたときにのみ呼び出されます。

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

これらのオプションはどちらもうまくいきませんでした。 switch_themeテーマを非アクティブ化した後にのみ機能しました。ただし、after_switch_theme完全に機能しました。
アーロンワーグナー

1
更新された回答:)
スティーブンハリス

switch_themeはもう機能していないようです。3.4アクティベーションの変更が原因だと思います。少なくとも私にとってはうまくいきません。
ジェイク

after_switch_themeは完璧に動作します。これは受け入れられる答えになるはずです。私はWP 3.5を使用しています
Ardee Aram 2013

0

より良い解決策は、Thomas Griffinのプラグインアクティベーションスクリプトを使用することです。これにより、テーマが使用されているときに、ユーザーが選択したプラグインをインストールするように求められます。これは、プラグインをテーマから分離し、それでも使用するための素晴らしい方法だと思います。

テーマ内で、プラグインの機能を使用する前に、プラグインがアクティブかどうかを確認してください。これにより、ユーザーはより多くの選択と制御が可能になります。

Knapsackを使用すると、アクティベーションスクリプトを簡単に設定できます。


3
答えは、単なる外部サイトへのリンクではありません。ソリューションを追加してください。
fuxia

0

あなたの最善の修正はswitch_theme、フックを使用し、渡された '$ theme'引数をフィルタリングして、それが現在のものであるかどうかを確認し、返されない場合です。

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

   // Your code here
}

add_action('switch_theme', 'nw_update_network');
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.