テーマアクティベートフック


15

テーマがアクティブになったときにWebサイトのURLをメールで送信する関数を作成したいと思います。

テーマがアクティブになったときに開始されるフックは何ですか?


5
この目的のためにテーマ活性化フックをされて使用して絶対に間違っている:「プログラムを実行する自由は自由を意味します...それを使用する...の...目的あらゆる種類のために、開発者とそれについて通信するために必要されることなく、または任意の他の特定のエンティティにこの自由で、それがある。利用者の問題、という目的ではない開発者の目的は、ユーザーとして、あなたの目的のために、プログラムを実行して自由であり、あなたが他の誰かにそれを配布する場合...あなたは彼女にあなたの目的を課す権利がない。」
チップベネット

1
これは悪い考えです。初期の素朴なプラグイン開発者として、私は自分やユーザーの結果を考えずにこのようなものを実装しました。1.これはユーザーのプライバシーを侵害します。2.テーマが広く配布されている場合、処理できないほど多くのメールを受信します。3.#2が当てはまる場合、メールをホストしている場所に応じて、アカウントは使用条件に違反していると解釈される可能性があります。このため、私のメールアカウントはしばらくの間シャットダウンされました。
ブライアンフェッター

@BrianFegter絶対に理にかなっています。これを試していたのは、最初の学習段階でした。懸念を共有していただきありがとうございます。StackOverflowとStackExchangeに関する最大の事実あなたが過去一年であなたの質問を見たとき、あなたはあなたが随時開発してきたどのくらい実現ということです:-)
ATIFモハメッドAmeenuddin

回答:


13

このコードは、Webサイトのようにファイルtheme_activation_hook.phpに名前を付けてコピーするだけです。

<?php
/**
 * Provides activation/deactivation hook for wordpress theme.
 *
 * @author Krishna Kant Sharma (http://www.krishnakantsharma.com)
 *
 * Usage:
 * ----------------------------------------------
 * Include this file in your theme code.
 * ----------------------------------------------
 * function my_theme_activate() {
 *    // code to execute on theme activation
 * }
 * wp_register_theme_activation_hook('mytheme', 'my_theme_activate');
 *
 * function my_theme_deactivate() {
 *    // code to execute on theme deactivation
 * }
 * wp_register_theme_deactivation_hook('mytheme', 'my_theme_deactivate');
 * ----------------------------------------------
 * 
 * 
 */

/**
 *
 * @desc registers a theme activation hook
 * @param string $code : Code of the theme. This can be the base folder of your theme. Eg if your theme is in folder 'mytheme' then code will be 'mytheme'
 * @param callback $function : Function to call when theme gets activated.
 */
function wp_register_theme_activation_hook($code, $function) {
    $optionKey="theme_is_activated_" . $code;
    if(!get_option($optionKey)) {
        call_user_func($function);
        update_option($optionKey , 1);
    }
}

/**
 * @desc registers deactivation hook
 * @param string $code : Code of the theme. This must match the value you provided in wp_register_theme_activation_hook function as $code
 * @param callback $function : Function to call when theme gets deactivated.
 */
function wp_register_theme_deactivation_hook($code, $function) {
    // store function in code specific global
    $GLOBALS["wp_register_theme_deactivation_hook_function" . $code]=$function;

    // create a runtime function which will delete the option set while activation of this theme and will call deactivation function provided in $function
    $fn=create_function('$theme', ' call_user_func($GLOBALS["wp_register_theme_deactivation_hook_function' . $code . '"]); delete_option("theme_is_activated_' . $code. '");');

    // add above created function to switch_theme action hook. This hook gets called when admin changes the theme.
    // Due to wordpress core implementation this hook can only be received by currently active theme (which is going to be deactivated as admin has chosen another one.
    // Your theme can perceive this hook as a deactivation hook.
    add_action("switch_theme", $fn);
}

1
このコードの作成者(Krishna Kant Sharma)も、ソースへのリンクを含む回答を残しました。...たぶん、ベニーはこの質問に答え時点で、彼は単に編集クリシュナの答えに精通十分ではなかったし、私のdownvoteしたがって、それにコードを追加
brasofilo

14

信頼できるアクティベーション/アクティベーション解除テーマフックを提供するコードを記述しました。ぜひチェックして、皆さんの意見を聞かせてください!

http://www.krishnakantsharma.com/2011/01/activationdeactivation-hook-for-wordpress-theme/


@Krisha Kant Sharma:そのコードは有望に見えますが、あなたの答えにそれをコピーできますか?ブログの場所が変更された場合、または何らかの理由でオフラインになった場合でも存在します。
1月ファブリー

1
クリシュナのコードはベニーの答えの1つです。
ブラソフィロ

8

このための特別なフックはありません。私はいくつかのアプローチを見てきました:

ユーザーの同意なしに情報をメールで送信すること(およびアクティベーションで何かを実行することは、そのような要求を行う機会がないこと)が不適切と見なされることに注意してください。


それは...ですか?URLだけで、どこにインストールされているかがわかりますか?
アティフモハメッドアメヌディン


0

このコードを functions.php

<?php if ( is_admin() && isset($_GET['activated'] ) && $pagenow == "themes.php" ) {
// do your stuff
$url = get_site_url();
// The message
$message = "a new wordpress theme is activated on $url ";

// In case any of our lines are larger than 70 characters, we should use wordwrap()
$message = wordwrap($message, 70, "\r\n");

// Send
wp_mail('mail@yourdomain.com', 'theme geactiveerd', $message);
}

?>

mail@yourdomain.com自分のメールアドレスに置き換えてください。

それが役に立てば幸い。

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