web-dev-qa-db-fra.com

Paramètres non définis après l'appel de register_setting ()

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):

debugging

Et voici le /options.php résultant après l'activation:

options.php

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.

1
GigiSan

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', '' );
}
4
Jacob Peattie