Comment ajouter un champ pour une nouvelle option à l'échelle du site sur l'écran Paramètres réseau?

15

Je travaille sur un plugin, et une partie de celui-ci consiste à définir une valeur d'option qui s'applique à tous les sites d'un réseau WordPress. Je connais les fonctions add_site_option et get_site_option qui vous permettent d'enregistrer la valeur dans la table wp_sitemeta, mais ce que je ne peux pas comprendre, c'est comment placer les champs à l'emplacement approprié dans le backend WordPress, et comment intercepter l'enregistrement de tout le site afin d'insérer l'appel add_site_option lorsque cela se produit.

Pour le premier problème (ajout des champs), j'utiliserais normalement l'API Settings, en particulier register_setting et add_settings_field, pour mettre en liste blanche la nouvelle option, puis insérer un champ pour celle-ci dans la page d'options appropriée. Mais je ne trouve aucune information nulle part sur la question de savoir si vous pouvez utiliser add_settings_field pour ajouter un champ à la page Paramètres dans la nouvelle section Administrateur réseau du backend, s'il existe une fonction alternative qui fait ce qu'elle fait pour les pages Administrateur réseau, ou si vous suffit d'injecter le HTML manuellement. (Vous pouvez le faire manuellement en écrivant une fonction qui fait écho sur le terrain, puis en connectant cette fonction à l'action "wpmu_options", qui s'exécute à la fin de la page Paramètres dans Network Admin. Mais vous devez également gérer les nonces et tout le reste manuellement.)

Le deuxième problème implique probablement de trouver une action qui s'exécute lorsque l'utilisateur clique sur "Enregistrer" sur la page Paramètres d'administration réseau, mais je n'ai pas encore pu le trouver. Toute piste serait grandement appréciée.

Alors - des pensées? Existe-t-il un moyen élégant de permettre la gestion des options du site pour un plugin via la nouvelle zone d'administration réseau? Si oui, comment ça se passe?

jalefkowit
la source

Réponses:

11

Une wpmu_optionsaction vous permet d'ajouter plus de code HTML sur la page Paramètres réseau.

Si vous souhaitez ajouter votre propre sous-menu / page au menu parent Paramètres:

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
}

le gestionnaire de sauvegarde:

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;  
}

Gardez le gestionnaire de sauvegarde si vous choisissez d'utiliser cette action que j'ai mentionnée ci-dessus et accrochez le formulaire à cette action.

onetrickpony
la source
1
Voici un article décrivant essentiellement la même approche: xplus3.net/2011/07/13/wordpress-network-admin-pages
mltsy
1

Fondamentalement, si vous ne souhaitez pas créer votre propre page de paramètres d'administration réseau, vous devrez utiliser les deux crochets mentionnés séparément dans les deux autres réponses:

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
}

Pour une explication très claire et un exemple de code utile, voir http://zao.is/2013/07/adding-settings-to-network-settings-for-wordpress-multisite/

RavanH
la source
0

Je crains que la seule méthode que je connaisse est la méthode que vous avez mentionnée pour injecter manuellement le html et gérer vous-même les mises à jour des options. L'action que vous devez utiliser pour enregistrer vos options est update_wpmu_options. Si nécessaire, je peux fournir un exemple plus détaillé, faites le moi savoir.

BjornW
la source