programing

Wordpress에서 플러그인 활성화 후크가 작동하지 않음

batch 2023. 3. 12. 10:37
반응형

Wordpress에서 플러그인 활성화 후크가 작동하지 않음

저는 첫 Wordpress 플러그인을 개발하려고 하는데 첫 번째 단계에서 실링되었습니다.플러그인이 활성화되었을 때 일부 옵션과 데이터베이스 테이블을 설정하려고 하지만, 잘 되지 않습니다.어떤 작업을 수행해도 플러그인은 활성화되지만 데이터베이스는 변경되지 않고 옵션은 DB에 저장되지 않습니다.시공자 안에서 메아리쳐 보았지만, 전혀 닿지 않는 것 같습니다.WP에서 디버깅을 활성화했지만 오류가 보고되지 않았습니다.기능이 잠겨 있지 않다.누가 내 코드에 뭐가 잘못됐는지 알아낼 수 있나요?

잘 부탁드립니다.

class Myplugin {

    private static $instance;

    public static function get_instance() {
        if ( ! self::$instance ) {
            self::$instance = new self();
        }
        return self::$instance;
    }

    private function __construct() {
        register_activation_hook( __FILE__, array( &$this, 'plugin_activate' ) );
    }

    public function plugin_activate() {
        if ( version_compare( get_bloginfo( 'version' ), '3.8.2', ' < ' ) ) {
            deactivate_plugins( basename( __FILE__ ) );
        } else {
            $rlm_rsvplus_options = array(
                'db_version'          => '1.0',
                'event_name'          => '',
                'end_date'            => '',
            );

        update_option( 'rlm_myplugin_options', $rlm_myplugin_options );

        require_once( "includes/rlm_myplugin_db_setup.php" );//It never reaches this file.


    }
    }
}

$myplugin = Myplugin::get_instance();

WordPress 매뉴얼로 돌아갑니다.

<?php register_activation_hook( $file, $function ); ?>

파라미터

$파일

(string) (필수) wp-content/plugins 디렉토리 내의 메인 플러그인 파일 경로.풀 패스는 기능합니다.디폴트: 없음

$함수

(콜백)(필수)플러그인이 활성화되었을 때 실행할 함수입니다.PHP의 콜백 의사 타입은 모두 동작합니다.디폴트: 없음

생각할 수 있는 문제

메인 플러그인 파일 외부에 있는 파일에서 함수를 호출할 경우 올바른 파일을 가리키지 않기 때문에 후크는 작동하지 않습니다.FILE은 코드가 기록된 파일을 가리킵니다.따라서 다른 곳에서 코드의 이 부분(메인 플러그인 파일이 아닌 다른 파일)을 포함할 경우 올바른 경로를 지정하지 않으면 작동하지 않습니다.

솔루션

솔루션이 기본 플러그인 파일에 상수를 선언하고 있을 수 있습니다.

your_main_main_file.file.displays

define(PLUGIN_FILE_URL, __FILE__);

그런 다음 첨부 파일에 이렇게 사용합니다.

includes/some_file.displays

<?php register_activation_hook( PLUGIN_FILE_URL, ['your_class_name_here', 'your_class_method_name_here']); ?>

또는 클래스 대신 함수를 사용하는 경우

<?php register_activation_hook( PLUGIN_FILE_URL, 'your_function_name_here'); ?>

register_activation_hook콜은 클래스 자체를 벗어나야 합니다.

예를 들어 다음과 같습니다.

class Myplugin {

    private static $instance;

    public static function get_instance() {
        if ( ! self::$instance ) {
            self::$instance = new self();
        }
        return self::$instance;
    }

    private function __construct() {
        // do other stuff here
    }

    public function plugin_activate() {
        if ( version_compare( get_bloginfo( 'version' ), '3.8.2', ' < ' ) ) {
            deactivate_plugins( basename( __FILE__ ) );
        } else {
            $rlm_rsvplus_options = array(
                'db_version'          => '1.0',
                'event_name'          => '',
                'end_date'            => '',
            );

        update_option( 'rlm_myplugin_options', $rlm_myplugin_options );

        require_once( "includes/rlm_myplugin_db_setup.php" );
    }
}

register_activation_hook( __FILE__, array( 'Myplugin', 'plugin_activate' ) );

Francis Yaconiello의 WordPress 플러그인 작성 방법에 대한 자세한 내용은 다음 튜토리얼을 참조하십시오.

register_activation_hook OR register_deactivation_hook을 작동시키려면 함수가 인덱스 파일에 있어야 합니다.또는 file 인수에 대한 풀 경로를 지정해야 합니다.

치환:

register_activation_hook(FILE, array( &$this, 'plugin_activate');

포함:

register_activation_hook(FILE . 'plugin-main-file.php', array( &$this, 'plugin_activate');

여기서 포인트는 register_activation_hook($file, $function)입니다.

여기서 $file은 메인 플러그인 파일의 경로를 의미합니다.

참고 자료: https://codex.wordpress.org/Function_Reference/register_activation_hook

감사합니다 - Adi

언급URL : https://stackoverflow.com/questions/22953418/plugin-activation-hook-not-working-in-wordpress

반응형