Come aggiungere un campo per la nuova opzione a livello di sito nella schermata Impostazioni di rete?


15

Sto lavorando su un plugin, e parte di esso implica l'impostazione di un valore di opzione che si applica a tutti i siti in una rete WordPress. Conosco le funzioni add_site_option e get_site_option che ti consentono di salvare il valore nella tabella wp_sitemeta, ma ciò che non riesco a capire è come posizionare i campi nella posizione appropriata nel backend di WordPress e come intercettare il salvataggio di tutto il sito valori per inserire la chiamata add_site_option quando ciò accade.

Per il primo problema (aggiunta dei campi), normalmente utilizzerei l'API delle impostazioni, in particolare register_setting e add_settings_field, per autorizzare la nuova opzione e quindi inserire un campo per essa nella pagina delle opzioni appropriate. Ma non riesco a trovare informazioni da nessuna parte sul fatto che sia possibile utilizzare add_settings_field per aggiungere un campo alla pagina Impostazioni nella nuova sezione Network Admin del backend, se esiste una funzione alternativa che fa ciò che fa per le pagine Network Admin o se si devo solo iniettare l'HTML manualmente. (Puoi farlo manualmente scrivendo una funzione che riecheggia il campo e quindi collegando quella funzione all'azione "wpmu_options", che viene eseguita alla fine della pagina Impostazioni in Amministratore di rete. Ma poi devi anche occuparti di nonces e tutto il resto manualmente.)

Il secondo problema probabilmente consiste nel trovare un'azione che viene eseguita quando l'utente preme "Salva" nella pagina Impostazioni amministratore di rete, ma non sono ancora riuscito a trovarlo. Ogni dritta sarebbe veramente apprezzata.

Quindi - pensieri? Esiste un modo elegante per consentire la gestione delle opzioni a livello di sito per un plug-in attraverso la nuova area Amministratore di rete? Se è così, come è andata?

Risposte:


11

C'è wpmu_optionsun'azione che ti consente di aggiungere più HTML nella pagina Impostazioni di rete.

Se vuoi aggiungere il tuo sottomenu / pagina al menu principale Impostazioni:

add_action('network_admin_menu', 'add_my_netw_settings_page');
function add_my_netw_settings_page() {
  add_submenu_page(
       'settings.php',
       'Co za asy',
       'Co za asy',
       'manage_network_options',
       'my-netw-settings',
       'your_form'
  );    
}

function your_form(){
  $options = get_site_option('your_plugin');

  ?>
  <form action="<?php echo admin_url('admin-post.php?action=update_my_settings'); ?>" method="post">
    <?php wp_nonce_field('your_plugin_nonce'); ?>

    ...fields go here...

  </form>
  <?php
}

il gestore di salvataggio:

add_action('admin_post_update_my_settings',  'update_my_settings');
function update_my_settings(){     
  check_admin_referer('your_plugin_nonce');
  if(!current_user_can('manage_network_options')) wp_die('FU');

  // process your fields from $_POST here and update_site_option

  wp_redirect(admin_url('network/settings.php?page=my-netw-settings'));
  exit;  
}

Conservare il gestore di salvataggio se si sceglie di utilizzare quell'azione che ho menzionato sopra e agganciare il modulo a quell'azione.


1
Ecco un articolo che descrive sostanzialmente lo stesso approccio: xplus3.net/2011/07/13/wordpress-network-admin-pages
mltsy

1

Fondamentalmente, se non si desidera creare la propria pagina delle impostazioni dell'amministratore di rete, sarà necessario utilizzare entrambi gli hook indicati separatamente nelle altre due risposte:

add_filter( 'wpmu_options' , 'show_network_settings' );
add_action( 'update_wpmu_options', 'save_network_settings' );

function save_network_settings() {
  // checkbox example
  if( isset( $_POST['my_network_checkbox'] ) )
    update_site_option( 'my_network_checkbox', '1' );

  // textfield example
  if( isset( $_POST['my_network_textfield'] ) )
    update_site_option( 'my_network_textfield', sanitize_text_field($_POST['my_network_textfield']) );
}

function show_network_settings() {
    $checkbox = get_site_option('my_checkbox'); 
    $text = get_site_option('my_text'); 
    ?>
    <h3><?php _e('My Network Settings','my-plugin'); ?></h3>
    <table class="form-table">
        <tbody>
            <tr>
                <th scope="row"><?php _e('My Checkbox','my-plugin'); ?></th>
                <td>
                    <label>
                        <input type='checkbox' name='my_checkbox' value='1' <?php checked( $checkbox, '1' ); ?> /> 
                    <?php _e('Check my box.','my-plugin'); ?>
                    </label>
                </td>
            </tr>
            <tr>
                <th scope="row"><label for="my_text"><?php _e('My Text','my-plugin'); ?></label></th>
                <td>
                        <input type='text' name='my_text' value='<?php echo $text; ?>' />
                </td>
            </tr>
        </tbody>
    </table>
    <?php
}

Per una spiegazione molto chiara e un utile esempio di codice consultare http://zao.is/2013/07/adding-settings-to-network-settings-for-wordpress-multisite/


0

Temo che l'unico metodo che conosco sia il metodo che hai citato per iniettare manualmente l'html e gestire autonomamente gli aggiornamenti delle opzioni. L'azione che devi usare per salvare le tue opzioni è update_wpmu_options. Se necessario, posso fornire un esempio più dettagliato, fammelo sapere.

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.