持っている:
// If this file is called directly, abort.
if ( ! defined( 'ABSPATH' ) ) {
die();
}
define('PLUGINNAME_PLUGIN_URL', plugin_dir_url( __FILE__ ));
define('PLUGINNAME_PLUGIN_DIR', plugin_dir_path(__FILE__));
require_once( plugin_dir_path( __FILE__ ) . 'class-pluginname.php' );
// Register hooks that are fired when the plugin is activated, deactivated, and uninstalled, respectively.
register_activation_hook( __FILE__, array( 'PluginName', 'activate' ) );
register_deactivation_hook( __FILE__, array( 'PluginName', 'deactivate' ) );
PluginName::get_instance();
/**
* Initialize the plugin
*
* @since 1.0.0
*/
private function __construct()
{
#add_action('init', array($this, 'widget_add_vars'));
#add_action('params', array($this, 'catch_widget_query'));
add_action('dailyExport', array($this, '_generateJson'));
if (!wp_next_scheduled('dailyExport')) {
wp_schedule_event( time(), 'daily', 'dailyExport' );
}
}
/**
* Return an instance of this class.
*
* @since 1.0.0
*
* @return object A single instance of this class.
*/
public static function get_instance()
{
// If the single instance hasn't been set, set it now.
if ( null == self::$instance )
self::$instance = new self;
return self::$instance;
}
/**
* Fired when the plugin is activated.
*
* @since 1.0.0
*/
public static function activate()
{
self::_generateJson();
wp_schedule_event(time(), 'daily', 'dailyExport');
}
/**
* Fired when the plugin is deactivated.
*
* @since 1.0.0
*/
public static function deactivate()
{
wp_clear_scheduled_hook('dailyExport');
}
public function dailyExport()
{
return self::_generateJson();
}
static
とactivate
関数をdeactivate
として定義するのが正しいと思うのであれば、私は思っていました、そして私がcronイベントと適切に連携して毎日のイベントをスケジュールするのであれば。
私はこのテンプレートに基づいて私のプラグインを書きました https://github.com/tommcfarlin/WordPress-Plugin-Boilerplate
私は先週プラグインでwp_cron
を使って作業していましたが、私たちは戦いをしており、もう言葉で話すことはありませんが、参考のためにこれを行います。
1) - スケジュールされたcronイベントをregister_activation_hook
に設定する
2) - register_deactivation_hook
の予定されたcronイベントを削除
スケジュールされたcronイベントがデータベースから消去される可能性がある場合は、次のスケジュールされたタイムスタンプですでにcronイベントを確認する必要があるため、ルーチンを追加できます。
if (!wp_next_scheduled('dailyExport')) {
//schedule event
wp_schedule_event( time(), 'daily', 'dailyExport' );
}
私の例のクラス
register_activation_hook(__FILE__, array( 'Killa', 'activated' ) );
register_deactivation_hook( __FILE__, array( 'Killa', 'deactivated' ) );
add_action('plugins_loaded', array ( Killa::get_instance(), 'plugin_setup' ) );
class Killa
{
protected static $instance = NULL;
public static function get_instance()
{
if ( null === self::$instance )
{
self::$instance = new self;
self::load_files();
}
return self::$instance;
}
public function plugin_setup()
{
add_action('my_cron_event', array($this, 'my_callback_function'));
}
public function __construct()
{
//empty
}
public static function activated()
{
wp_schedule_event( time(), 'hourly', 'my_cron_event');
}
public static function deactivated()
{
wp_clear_scheduled_hook( 'my_cron_event' );
}
public function my_callback_function()
{
//do your thing here... such as generate JSON
}
}
要するに、レジスタの有効化/無効化フックを静的関数として定義し、シングルトン型のパターンで作業する場合やactivated()/deactivated()
関数がコントローラによる別のクラス呼び出し内に存在する可能性がある場合はより適切に定義することで問題ありません。
クラス構造によっては、登録フックをコンストラクタ内に置くこともできます。