플러그인이 활성화되면 설정 페이지로 리디렉션하는 방법은 무엇입니까?


16

나는 내 자신의 플러그인을 만들었습니다. 모든 것이 괜찮아 보이지만 플러그인이 활성화되면 플러그인에서 수행하려는 한 가지 기능이 해당 플러그인 설정 페이지로 리디렉션됩니다.

예를 들면 다음과 같습니다.
http://www.example.com/wordpress/wp-admin/options-general.php?page=rotator

활성화시 해당 페이지로 리디렉션하는 방법이 register_activation_hook있습니까 ( 예 : ?

답변:


17

아마도 wp_redirect()활성화 훅 의 기능을 사용하고있을 것입니다. 다음 예 myplugin_settings는 자리 표시 자입니다. 일반적으로 이것은 단순히 비슷한 기능 $hook_suffix에서 돌아 오는 $hook_suffix = add_menu_page( /* etc. */ );것입니다.

이 코드는 작동하지 않습니다. 아래를 읽으십시오

register_activation_hook(__FILE__, 'cyb_activation');
function cyb_activation()
{
    // Don't forget to exit() because wp_redirect doesn't exit automatically
    exit( wp_redirect( admin_url( 'options-general.php?page=myplugin_settings' ) ) );
}

참고 문헌 :

  1. 활성화 훅 등록
  2. admin_url ()

편집하다

활성화 훅 내부의 리디렉션은 플러그인이 효과적으로 활성화되기 전에 수행되는 것으로 보입니다. 활성화가 실행되기 전에 exit () 호출 때문일 수 있습니다. 이 코드는 사용하여 잘 작동하는 것 같다 activated_plugin 액션 hoook :

function cyb_activation_redirect( $plugin ) {
    if( $plugin == plugin_basename( __FILE__ ) ) {
        exit( wp_redirect( admin_url( 'options-general.php' ) ) );
    }
}
add_action( 'activated_plugin', 'cyb_activation_redirect' );

기본 플러그인 파일 외부에서이 코드를 사용하는 경우 기본 플러그인 파일의 __FILE__경로 를 다시 채워야 합니다.

생각

플러그인이 활성화 된 후 사용자를 리디렉션하는 것은 좋은 방법이 아닙니다. Wordpress에서는 플러그인을 일괄 적으로 활성화 할 수 있습니다. 이 상황에서 리디렉션을 수행하면 어떻게됩니까? 플러그인이 마지막으로 활성화 된 경우가 아니라면 일부 플러그인의 활성화가 중단 될 수 있지만 사용자 환경이 손상 될 수 있습니다.


1
훨씬 더 건전한 접근. +1
kaiser

플러그인을 활성화하지 못하고 대신 "이 페이지를 볼 수있는 권한이 없습니다"라는 오류가 발생하는 다른 사람이 문제를 겪고 있습니까? 메뉴 페이지를 잘못 연결 했습니까? exit;전화가 활성화를 단축시키는 것 같습니다 .
Andy Adams

권한 오류는 리디렉션 URL을 'options-general.php?page=myplugin_settings'다르고 유효한 것으로 변경하지 않았기 때문 입니다. 어쨌든 exit플러그인이 효과적으로 활성화되기 전에 활성화 후크가 실행되어 작동하지 않습니다. 새로운 작업 코드로 답변을 편집했습니다.
cybmeta

코드가 이미 헤더를 보냈습니다. 문제를 해결할 방법이 있습니까?
Latheesh VM Villa

7

다음과 같이 할 수 있어야합니다.

register_activation_hook(__FILE__, 'my_plugin_activate');
add_action('admin_init', 'my_plugin_redirect');

function my_plugin_activate() {
    add_option('my_plugin_do_activation_redirect', true);
}
// Solution 1
function my_plugin_redirect() {
    if (get_option('my_plugin_do_activation_redirect', false)) {
        delete_option('my_plugin_do_activation_redirect');
         wp_redirect("options-general.php?page=rotator");
         //wp_redirect() does not exit automatically and should almost always be followed by exit.
         exit;
    }
}

// OR

//Solution 2 (@kaiser suggestion)
function my_plugin_redirect() {
    if (get_option('my_plugin_do_activation_redirect', false)) {
        delete_option('my_plugin_do_activation_redirect');
         exit( wp_redirect("options-general.php?page=rotator") );
    }
}

최신 정보

인라인 주석 인 경우에도 다음을 기억하십시오.

wp_redirect () 는 자동으로 종료되지 않으며 거의 ​​항상 종료해야합니다.

구체적인 예

<?php
    wp_redirect( $location, $status );
    exit;
?>

2013 년 10 월 29 일 업데이트

언급되지 않았지만 내 솔루션은 플러그인 설정 페이지로 리디렉션할지 여부를 확인할 수있는 기능을 제공합니다. 에서 my_plugin_activate및 if 조건을 확인하십시오 my_plugin_redirect.

그것이 도움이되기를 바랍니다!


exit()주변에 없어야합니까 wp_redirect()?
카이저

2
@kaiser, 답변이 업데이트되었습니다.
iEmanuele

3

안녕하세요, 플러그인 활성화 후 벨로우즈 코드 리디렉션을 사용했습니다. 이 코드를 사용할 수 있습니다. 잘 작동하고 있습니다.

register_activation_hook(__FILE__, 'nht_plugin_activate');
add_action('admin_init', 'nht_plugin_redirect');

function nht_plugin_activate() {
add_option('nht_plugin_do_activation_redirect', true);
}

function nht_plugin_redirect() {
if (get_option('nht_plugin_do_activation_redirect', false)) {
    delete_option('nht_plugin_do_activation_redirect');
    if(!isset($_GET['activate-multi']))
    {
        wp_redirect("edit.php?post_type=headline&page=news-headline");
    }
 }
}

nht_는 플러그인 접두사이며 "edit.php? post_type = headline & page = news-headline"은 리디렉션 페이지입니다. 이것들을 교체하십시오. e2soft.com에서
csehasib
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.