Settings not set after calling register_setting()

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

debugging

And this is the resulting /options.php after the activation:

options.php

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.

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s