【问题标题】:WordPress plugin - How to set a cron job that checks an external source and then stores it in a global variableWordPress 插件 - 如何设置检查外部源并将其存储在全局变量中的 cron 作业
【发布时间】:2018-07-17 03:20:35
【问题描述】:

我有一个 WordPress 插件,我想使用 cron 作业每 60 分钟检查一次外部 URL (JSON) 是否有任何更改。然后我想将该响应存储在一个全局变量中,以便以后使用。

到目前为止,这是我的代码...

class GetPosts
{

public $CheckPostDate;

public $SetPostData;

/**
 * @param mixed $CheckPostDate
 */
public function setCheckPostDate($CheckPostDate)
{
    $this->CheckPostDate = $CheckPostDate;
}

/**
 * @param mixed $SetPostData
 */
public function setSetPostData($SetPostData)
{
    $this->SetPostData = $SetPostData;
}


public function __construct()
{

    // add custom interval
    function cron_add_minute( $schedules ) {
        // Adds once every minute to the existing schedules.
        $schedules['everyminute'] = array(
            'interval' => 60,
            'display' => __( 'Once Every Minute' )
        );
        return $schedules;
    }
    add_filter( 'cron_schedules', 'cron_add_minute' );



    // create a scheduled event (if it does not exist already)
    function cronstarter_activation() {
        if( !wp_next_scheduled( 'mycronjob' ) ) {
            wp_schedule_event( time(), 'everyminute', 'mycronjob' );
        }
    }
    // and make sure it's called whenever WordPress loads
    add_action('wp', 'cronstarter_activation');


    // unschedule event upon plugin deactivation
    function cronstarter_deactivate() {
        // find out when the last event was scheduled
        $timestamp = wp_next_scheduled ('mycronjob');
        // unschedule previous event if any
        wp_unschedule_event ($timestamp, 'mycronjob');
    }
    register_deactivation_hook (__FILE__, 'cronstarter_deactivate');


    function mycronjob() {

        // Get the posts update JSON
        $update_args = array(
            'timeout' => 30
        );

        $check_posts_update = wp_remote_get('http://example.com', $update_args);
        $checkPostDate = wp_remote_retrieve_body($check_posts_update);

        if(empty($checkPostDate)) return false;

        $this->setCheckPostDate($checkPostDate);

    }
    add_action ('mycronjob', [$this, 'my_repeat_function']);

}

}
global $GetPosts;
$GetPosts = new GetPosts();

函数 checkRandom() 每 60 秒工作一次,但它不会更新全局变量。

【问题讨论】:

    标签: php wordpress plugins cron


    【解决方案1】:

    由于每个请求都是单独的,我会说,将其保存到文件中

    $data = ['apples','bananas'];
    
    file_put_contents(__DIR__.'/cron.json', json_encode($data));
    

    以后像这样使用它:

    $data = json_decode(file_get_contents(__DIR__.'/cron.json'),true);
    if($data !== false) {
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-20
      • 1970-01-01
      • 2012-07-21
      • 2022-12-03
      • 2016-04-24
      • 1970-01-01
      相关资源
      最近更新 更多