after_setup_theme은 항상 실행됩니다


11

일부 교직원을 위해 하위 테마를 설정하고 있으며 테마의 일부로 테마가 활성화 될 때 소수의 플러그인이 활성화되기를 원합니다. 따라서 당연히 after_setup_theme 작업을 사용하고 설정 기능을 호출했습니다. 모든 요청 (관리자 및 기타)에서 실행되는 것을 제외하고는 훌륭하게 작동합니다. 설정 기능의 끝에 이것을 추가하여 이것을 증명했습니다.

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

결과적으로 모든 관리자 요청과 모든 프론트 엔드 요청에 대해 자바 스크립트 경고를 얻습니다 (네트워크 설정이 있으므로이 테마가 활성화되지 않은 사이트에서는 분명히 기능을 실행하지 않습니다)

문제는 이것이 버그입니까? 내가 어떻게 든 잘못하고 있습니까? 내가 사용하는 완전한 코드는 다음과 같습니다.

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내가 여기서 의도 한 것을 정확하게 수행합니다. 테마가 테마로 전환되면 시작됩니다. 아래에 언급 된 솔루션 중 하나가 사용 switch_theme됩니다. 테마에서 전환 할 때만 발생하므로 원하는 결과를 얻지 못합니다. 이 Trac 설명을 참조하십시오
Aaron Wagner

질문에 대한 의견 이 아니라 답변 으로 게시 하십시오. :)
Chip Bennett

2
사과. 아직 그렇게 할 수 없었습니다. 나는 그것을 약간의 답변으로 추가 할 것입니다.
Aaron Wagner

답변:


8

해결책 : after_switch_theme내가 여기서 의도 한 것을 정확하게 수행합니다. 테마가 테마로 전환되면 시작됩니다. 아래에 언급 된 솔루션 중 하나가 사용 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하는 지점을 나타냅니다 .

당신이 찾고있는 것은 현재 사용할 수 없지만 고려 중입니다 / 개발 중인 테마 활성화 후크 입니다.


Codex 항목 링크 는 몹시 오도됩니다. "이 후크는 테마 초기화 중에 호출됩니다."라고 말합니다. 즉, 후크가 활성화되면 후크를 호출해야합니다. 나는 당신이 무슨 말을하는지 이해합니다. 정말 오해의 소지가 있습니다.
Aaron Wagner

5
init !== activation. 일반적으로 __construct()PHP에서 init함수 도 호출 합니다. 즉, 인스턴스를 초기화합니다.
kaiser

trac 티켓은 7 살이며 고쳐지지 않을 것입니다!
numediaweb

4

불행히도 테마 활성화 후크가 없습니다. 그러나이 질문 은 그에 대한 해결 방법을 제공합니다.

간단히 '테마 활성화 훅'을 사용하여 플러그인을 활성화하십시오.

같은 맥락에서 더 나은 해결책 은 이것 입니다. 둘 다 본질적으로 switch_theme후크를 사용합니다 .


영업 이익의 의견과 당으로 연결 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완벽하게 작동했습니다.
Aaron Wagner

1
업데이트 된 답변 :)
Stephen Harris

switch_theme가 더 이상 작동하지 않는 것 같습니다. 3.4 활성화 변경으로 인한 것 같습니다. 적어도 그것은 나를 위해 작동하지 않습니다.
Jake

after_switch_theme은 완벽하게 작동합니다. 이것이 정답입니다. 저는 WP 3.5를 사용하고 있습니다
Ardee Aram

0

더 나은 해결책은 Thomas Griffin의 플러그인 활성화 스크립트를 사용하는 것 입니다. 테마를 사용할 때 원하는 플러그인을 설치하라는 메시지가 표시됩니다. 나는 이것이 플러그인을 테마와 분리하고 여전히 그것을 사용하는 좋은 방법이라고 생각합니다.

테마 내에서 플러그인을 사용하기 전에 플러그인이 활성화되어 있는지 확인하십시오. 이를 통해 사용자는 더 많은 선택과 제어를 할 수 있습니다.

Knapsack으로 쉽게 활성화 스크립트를 설정할 수 있습니다 .



0

가장 좋은 방법은 switch_themehook 을 사용 하고 전달 된 '$ 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.