アクティベーションフック機能付きのプラグインがあります。この関数は4つの設定変数を登録する必要があります。
理由はわかりませんが、最初の設定だけが正しく登録され、最後の3つはどういうわけかスキップされます。
これがプラグインのメインファイルです。
<?php
/*
Plugin Name: Integrazione Liferay
Version: 1.1.0
Text Domain: integrazione-liferay
*/
register_activation_hook( __FILE__, 'integrazione_liferay_activate');
register_deactivation_hook( __FILE__, 'integrazione_liferay_deactivate');
register_uninstall_hook( __FILE__, 'integrazione_liferay_uninstall');
//Funzione di attivazione plugin
function integrazione_liferay_activate() {
// Registro variabile che indica se il cron deve essere attivo
if (get_option('integrazione_liferay_cron_enabled') === false) {
$args = array(
'type' => 'integer',
'default' => 0,
);
register_setting( 'integrazione_liferay_options', 'integrazione_liferay_cron_enabled', $args );
}
update_option( 'integrazione_liferay_cron_enabled', 1);
// Registro variabile che indica se è necessario riscrivere i permalinks
if (get_option('integrazione_liferay_flush_permalinks') === false) {
$args = array(
'type' => 'integer',
'default' => 0,
);
register_setting( 'integrazione_liferay_options', 'integrazione_liferay_flush_permalinks', $args );
}
update_option( 'integrazione_liferay_flush_permalinks', 0);
// Registro variabile che indica l'ultimo timestamp elaborato
if (get_option('integrazione_liferay_last_timestamp') === false) {
$args = array(
'type' => 'integer',
'default' => 0,
);
register_setting( 'integrazione_liferay_options', 'integrazione_liferay_last_timestamp', $args );
}
update_option( 'integrazione_liferay_last_timestamp', 0);
// Registro variabile che memorizza il csv serializzato
if (get_option('integrazione_liferay_csv_data') === false) {
$args = array(
'type' => 'string',
'default' => "",
);
register_setting( 'integrazione_liferay_options', 'integrazione_liferay_csv_data', $args );
}
update_option( 'integrazione_liferay_csv_data', "");
}
// Funzione di disattivazione plugin
function integrazione_liferay_deactivate() {
// Disabilito creazione nuovi cron
update_option( 'integrazione_liferay_cron_enabled', 0);
// De-schedulo tutti i cron già schedulati
$timestamp = wp_next_scheduled( 'integrazione_liferay_cron_hook' );
while ($timestamp) {
wp_unschedule_event( $timestamp, 'integrazione_liferay_cron_hook' );
$timestamp = wp_next_scheduled( 'integrazione_liferay_cron_hook' );
}
}
// Funzione di disinstallazione plugin
function integrazione_liferay_uninstall() {
// Eseguo disattivazione preventiva
integrazione_liferay_deactivate();
// Rimuovo i settings
unregister_setting( 'integrazione_liferay_options', 'integrazione_liferay_cron_enabled' );
unregister_setting( 'integrazione_liferay_options', 'integrazione_liferay_flush_permalinks' );
unregister_setting( 'integrazione_liferay_options', 'integrazione_liferay_last_timestamp' );
unregister_setting( 'integrazione_liferay_options', 'integrazione_liferay_csv_data' );
}
プラグインを無効にしてから再度有効にして、その部分をデバッグしてみました。デバッガは実際に毎回最後の3つの設定を設定しようとします。なぜならそれらの3のget_option()
は起動のたびに常にfalse
を返すからです。これはデバッグ結果(GIF)です。
そして、これはアクティベーション後の/options.php
です
私は他のプラグインでこの設定パターンを使ったことがありますが、この設定の振る舞いに頭を包むことはできません。
お返事ありがとうございます。
register_setting
はデータベースには何も挿入しません。起動時だけでなくadmin_init
で実行されることになっていて、 設定API を使用してオプションページを作成するためのもので、保存時に消毒や許可などの処理を行います管理者のオプション。
アクティブ化時にデータベースにデフォルトのオプション値を追加する場合は、 add_option()
を使用します。データベースにオプションと値を追加しますが、そのオプションに値がまだない場合に限ります。
function integrazione_liferay_activate() {
add_option( 'integrazione_liferay_cron_enabled', 1 );
add_option( 'integrazione_liferay_flush_permalinks', 0 );
add_option( 'integrazione_liferay_last_timestamp', 0 );
add_option( 'integrazione_liferay_csv_data', '' );
}