调用REGISTER_SETTING()后未设置设置

时间:2018-07-30 作者:GigiSan

我有一个带有激活挂钩功能的插件。此函数必须注册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个设置设置为get_option() 在这三个月里false 每次激活时。这是调试结果(GIF):

debugging

这就是结果/options.php 激活后:

options.php

我在其他一些插件中使用过这种设置模式,但我无法理解这种模式的行为。

提前感谢您的回复。

1 个回复
最合适的回答,由SO网友:Jacob Peattie 整理而成

register_setting 不在数据库中插入任何内容。应该是磨合的admin_init, 不仅仅是在激活时,而且用于构建选项页面Settings 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\', \'\' );
}

结束

相关推荐

REGISTER_ACTIVATION_HOOK()不激活插件

我正在写一个插件,在激活时必须在数据库中创建一个新表。为此,我使用:register_activation_hook( __FILE__, \'createTable\' ); 当我运行激活时,我的插件在数据库中创建新表,但当插件页面重新加载时,我的插件被列为非活动。所以我仍然有链接:激活|删除。为什么会这样?如何修复?以下是我的功能: function createTable(){ $link = mysql_connect(\'localhost\'