J'ai un plugin avec une fonction d'activation accrochée. Cette fonction doit enregistrer 4 variables de réglage.
Je ne vois pas pourquoi, mais seul le premier paramètre est enregistré correctement, les 3 derniers sont en quelque sorte ignorés.
C'est le fichier principal du plugin:
<?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' );
}
J'ai essayé de déboguer la pièce en désactivant et en réactivant le plugin. Le débogueur tente en réalité de définir les 3 derniers paramètres à chaque fois comme get_option()
sur ces 3 renverra toujours false
à chaque activation. Voici le résultat du débogage (GIF):
Et voici le /options.php
résultant après l'activation:
J'ai utilisé ce modèle de paramètres dans d'autres plugins mais je ne peux pas comprendre le comportement de celui-ci.
Merci d'avance pour vos réponses.
register_setting
n'insère rien dans la base de données. Il est supposé être exécuté dans admin_init
, pas seulement lors de l'activation, mais pour créer des pages d'options avec l'API Paramètres et gère des tâches telles que la désinfection et les autorisations lors de la sauvegarde. options dans l'admin.
Si vous souhaitez ajouter des valeurs d’option par défaut à la base de données lors de l’activation, utilisez add_option()
. Cela ajoutera l'option et la valeur à la base de données, mais seulement s'il n'y a pas déjà une valeur pour cette 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', '' );
}