programing

wp_schedule_이벤트 ()이 클래스 활성화 함수 내에서 작동하지 않습니다.

newstyles 2023. 9. 21. 20:09

wp_schedule_이벤트 ()이 클래스 활성화 함수 내에서 작동하지 않습니다.

기본 플러그인 파일(plugin.php)의 맨 위에서 이벤트를 예약하면 cron이 wp_options에 추가됩니다.cron선택.

wp_schedule_event( time() + 10, 'hourly', 'this_is_my_action' );

이것은 잘 작동합니다. 이것은 새로운 cron을 추가합니다.그런데 플러그인 클래스 내의 활성화 기능에서 동일한 기능을 사용하려고 하면 작동이 되지 않습니다.

내부 플러그인.내가 가지고 있는 php:

$plugin = new My_Plugin(__FILE__);
$plugin->initialize();

My_Plugin 클래스 내부에는 다음이 있습니다.

class My_Plugin{

    function __construct($plugin_file){
        $this->plugin_file = $plugin_file;
    }

    function initialize(){
        register_activation_hook( $this->plugin_file, array( $this, 'register_activation_hook' ) );
    }

    function register_activation_hook()
    {
        $this->log( 'Scheduling action.' );
        wp_schedule_event( time() + 10, 'hourly', 'this_is_my_action' );
    }

    function log($message){
        /*...*/
    }

}

플러그인을 활성화하면 로그가 기록되지만, 크론은 워드프레스 데이터베이스에 추가되지 않습니다.왜 그런지 아시겠어요?

예약된 이벤트에 등록한 작업을 정의해야 합니다.

class My_Plugin{

function __construct($plugin_file){
    $this->plugin_file = $plugin_file;
}

function initialize(){
    register_activation_hook( $this->plugin_file, array( $this, 'register_activation_hook' ) );        
    add_action( 'this_is_my_action', array( $this, 'do_it' );
}

function register_activation_hook()
{
    if ( !wp_next_scheduled( 'this_is_my_action' ) ) {
        $this->log( 'Scheduling action.' );
        wp_schedule_event( time() + 10, 'hourly', 'this_is_my_action' );
    }
}

function this_is_my_action(){
//do
}

function log($message){
}

function do_it() {
    // This is your scheduled event
}

}

시도해 보기:

class My_Plugin{

    function __construct($plugin_file){
        $this->plugin_file = $plugin_file;
    }

    function initialize(){
        register_activation_hook( $this->plugin_file, array( $this, 'register_activation_hook' ) );
    }

    function register_activation_hook()
    {
        $this->log( 'Scheduling action.' );
        wp_schedule_event( time() + 10, 'hourly', array( $this,'this_is_my_action' ));
    }

    function this_is_my_action(){
    //do
    }

    function log($message){
    }

}

추가할 필요가 있습니다.array($this,'name_function')예정대로

언급URL : https://stackoverflow.com/questions/17537776/wp-schedule-event-not-working-inside-class-activation-function