update_option su attivazione multisito
-
Buongiorno,
sto lavorando allo sviluppo di un plugin multisito, e ho un comportamento che non riesco a spiegami nella routine di attivazione.Nel file principale del plugin registro una funzione di attivazione che chiama un metodo statico (activate) nella classe di attivazione, trasferendo il parametro $network_wide.
Codice nel file principale del plugin:
register_activation_hook( __FILE__, 'activate_plugin' ); function activate_plugin( $network_wide ) { require_once plugin_dir_path( __FILE__ ) . 'includes/class-plugin-activator.php'; Plugin_Activator::activate( $network_wide ); }
Il metodo activate di Plugin_Activator, fa dei controlli e poi chiama il metodo single_activate che, a sua volta richiama un metodo statico per inserire/aggiornare un’opzione del singolo sito:
class Plugin_Activator { public static function activate( $network_wide ): void { $check_versions = self::plugin_check_minimum_versions(); if ( true === $check_versions ) { if ( function_exists( 'is_multisite' ) && is_multisite() && $network_wide ) { $blogids = DB::get_blogs_ids(); // return $wpdb->get_col( "SELECT blog_id FROM $wpdb->blogs" ); foreach ( $blogids as $blog_id ) { switch_to_blog( $blog_id ); if ( ! is_plugin_active( 'plugin/plugin.php' ) ) { self::single_activate(); } } restore_current_blog(); } else { self::single_activate(); } } else { $error = 'an error'; die( esc_html( $error ) ); } }
Il metodo single_activate:
public static function single_activate( $network_wide = false ): void { set_time_limit( 360 ); DB::db_create(); // crea le tabelle utilizzando dbDelta self::set_an_option(); }
Il problema è con il metodo set_an_option:
private static function set_an_option(): void { $plugin_option = array( 'option_a' => 0, 'option_b' => 0, 'option_c' => 0, ); update_option( 'my-plugin-option', $plugin_option ); }
Il problema è che, quando attivo il plugin su sito singolo, l’opzione è correttamente creata e i tre valori ricevono il valore 0.
Quando, invece, lancio l’attivazione a livello di network, l’opzione viene creata, ma tutti i valori assumono valore 1.
Ho fatto un test e se i tre valori dell’opzione vengono impostati a null nella funzione set_an_option, nell’attivazione network, i tre valori vengono serializzati con 0, mentre nell’attivazione singola viene inserito nel database un valore “N” (letterale).Grazie per l’aiuto.
- Il topic ‘update_option su attivazione multisito’ è chiuso a nuove risposte.