I have a plugin with an activation hooked function. This function has to register 4 setting variables.
I can't see why, but only the first setting is registered correctly, the last 3 are somehow skipped.
This is the plugin main file:
<?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' );
}
I tried debugging the piece by deactivating and re-activating the plugin. The debugger actually tries to set the last 3 settings each time as get_option()
on those 3 will always return false
on every activation. This is the debugging result (GIF):
And this is the resulting /options.php
after the activation:
I have used this settings pattern in some other plugins but I can't wrap my head around this one's behavior.
Thanks in advance for your replies.
register_setting
does. It's supposed to be run inadmin_init
, not just on activation, and is for building options pages with the Settings API.