web-dev-qa-db-ja.com

Register_setting()を呼び出した後に設定が設定されない

アクティベーションフック機能付きのプラグインがあります。この関数は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つの設定を設定しようとします。なぜならそれらの3のget_option()は起動のたびに常にfalseを返すからです。これはデバッグ結果(GIF)です。

debugging

そして、これはアクティベーション後の/options.phpです

options.php

私は他のプラグインでこの設定パターンを使ったことがありますが、この設定の振る舞いに頭を包むことはできません。

お返事ありがとうございます。

1
GigiSan

register_settingはデータベースには何も挿入しません。起動時だけでなくadmin_initで実行されることになっていて、 設定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', '' );
}
4
Jacob Peattie