API delle impostazioni in più siti: messaggio di aggiornamento mancante


8

Quando utilizzo l'API delle impostazioni in un'installazione multisito e la pagina delle opzioni si trova a livello di rete, la pubblicazione delle opzioni options.phpnon funziona, poiché la pagina di amministrazione si trova su wp-admin/networke WP prevede che la pagina si trovi su wp-admin.

Ho aggiunto una funzione che controlla se questa installazione WP è un'installazione multsite (tramite la costante) e se lo è, cambia il valore dell'azione del modulo in ../option.php. Ciò salva le opzioni OK, ma il messaggio predefinito "Impostazioni salvate". manca (tuttavia, la stringa di query include settings-updated=true).

Qualche idea su come far apparire il messaggio?

Risposte:


11

Per le pagine delle opzioni di rete l'URL dell'azione del modulo corretto è:

wp-admin/network/edit.php?action=your_option_name

Quindi devi registrare un callback:

add_action( 
    'network_admin_edit_your_option_name', 
    'your_save_network_options_function' 
);

In quella funzione di callback ispezionare i $_POSTdati, preparare i valori, quindi salvarli:

update_site_option( $this->option_name, $this->option_values );

E quindi devi creare il reindirizzamento senza ulteriore aiuto:

// redirect to settings page in network
wp_redirect(
    add_query_arg(
        array( 'page' => 'your_options_page_slug', 'updated' => 'true' ),
        (is_multisite() ? network_admin_url( 'admin.php' ) : admin_url( 'admin.php' ))
    )
);
exit;

Nella pagina delle opzioni $_GET['updated'], controlla e aggiungi un avviso di amministratore se hai trovato quel parametro.


Quindi l'API delle impostazioni non è disponibile nelle pagine di amministrazione della rete? E cosa aveva fatto @NightHawk in origine, in realtà stava salvando le opzioni sul blog principale della rete e non le stava salvando in tutto il sito, giusto?
Parham,

@Parham Non ho visto il suo codice, ma so che la maggior parte delle parti dell'API Impostazioni non sono disponibili nelle pagine della rete o si comportano in modo strano. Non è necessario usarlo.
fuxia

0

Ho usato la risposta di @ toscho che funziona alla grande, tuttavia in alcuni percorsi di installazione di wordpress l'URL di azione del modulo hardcoded non funzionerà. Qui @birgire afferma come creare l'URL corretto :

Quando ti riferisci agli URL all'interno dell'amministratore di rete, dovresti considerare network_admin_url (). funzione principale, che ricade in admin_url () per configurazioni non multisito.

echo esc_url( 
    add_query_arg( 
       'action', 
       'your_option_name', 
       network_admin_url( 'edit.php' ) 
    )
);
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.