테마 활성화 훅


15

테마가 활성화되면 웹 사이트의 URL을 전자 메일로 보내는 기능을 작성하고 싶습니다.

테마가 활성화 될 때 시작되는 후크는 무엇입니까?


5
이 목적으로 테마 활성화 훅을 사용하는 것은 절대적으로 잘못입니다 . "프로그램을 실행할 자유 는 개발자와 의사 소통 할 필요없이 어떤 종류의 목적 으로든 프로그램을 사용할 수있는 자유를 의미합니다. 또는 기타 특정 엔티티는 .이 자유를, 그것은이다 사용자의 목적은 그 사안 이 아닌 개발자의 목적 , 사용자로 당신은 당신의 목적을 위해 프로그램을 실행하는 무료이며, 당신이 다른 사람에게 배포 할 경우 ... 당신은 그녀에게 당신의 목적을 강요 할 자격이 없습니다 . "
칩 베넷

1
이것은 나쁜 생각입니다. 초기에는 순진한 플러그인 개발자로서 본인이나 사용자의 결과에 대한 생각없이 이와 같은 것을 구현했습니다. 1. 이것은 사용자의 개인 정보를 침해합니다. 2. 테마가 널리 배포되면 처리 할 수있는 것보다 많은 이메일을 받게됩니다. 3. # 2가 맞으면 이메일을 호스팅하는 위치에 따라 계정이 사용 약관을 위반하는 것으로 해석 될 수 있습니다. 이로 인해 내 이메일 계정이 잠시 종료되었습니다.
Brian Fegter

@BrianFegter 절대적으로 의미가 있습니다. 나는 이것을 시도했을 때 나의 초기 학습 단계에 있었다. 관심사를 공유해 주셔서 감사합니다. StackOverflow에와 StackExchange에 대한 가장 큰 사실은 지난 해 질문을 볼 때, 당신은 당신이 시간에서 :-) 시간에 개발이 얼마나 실현이다
ATIF 모하메드 Ameenuddin

답변:


13

웹 사이트에서와 같이 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)도 그 출처에 대한 링크로 답변을 남겼습니다. 아마도 Benny가이 질문에 대답했을 때, 그는 단순히 Krishna의 답변을 편집하고 코드를 추가하기에 충분히 정통하지 않았기 때문에 내 downvote ...
brasofilo

14

신뢰할 수있는 활성화 / 비활성화 테마 후크를 제공하는 코드를 작성했습니다. 그것을 확인하고 당신의 생각을 알려주세요!

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


@Krisha Kant Sharma :이 코드는 유망 해 보이지만 답변에 복사 할 수 있습니까? 블로그가 위치를 변경하거나 어떤 이유로 든 오프라인 상태가 된 경우에도 계속 존재합니다.
Jan Fabry

1
Krishna의 코드는 Benny의 답변 중 하나입니다.
brasofilo

8

이에 대한 특별한 고리는 없습니다. 나는 두 가지 접근법을 보았다 :

사용자의 동의없이 자신에게 정보를 전자 메일로 보내는 것은 (활성화 할 때 아무것도 요청할 수있는 기회가 없음) 부적절한 것으로 간주 될 수 있습니다.


그렇습니까? URL이 어디에 설치되어 있는지 알 수 있습니까?
Atif Mohammed Ameenuddin


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.