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
'programing' 카테고리의 다른 글
워드프레스 관리 막대가 프런트엔드에 표시되지 않음 (0) | 2023.03.12 |
---|---|
외부에서는 사용하지 마십시오. (0) | 2023.03.12 |
Wordpress 로그인 시스템에 연결하여 일부 사용자를 프로그래밍 방식으로 중지하려면 어떻게 해야 합니까? (0) | 2023.03.12 |
2014년 5월 Oracle v Google 결정으로 인해 문제가 될 수 있는 37개의 Java API 패키지는 무엇입니까? (0) | 2023.03.12 |
타이프 스크립트에서 두 날짜 사이의 시간을 계산하려면 어떻게 해야 합니까? (0) | 2023.03.12 |