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

13

Je travaille sur un plugin et une partie de celui-ci implique la définition d'une valeur d'option qui s'applique à tous les sites d'un réseau WordPress. Je connais les add_site_option et les get_site_option fonctions qui vous permettent de sauvegarder la valeur dans la table wp_sitemeta, mais je ne comprends pas comment placer les champs à l'emplacement approprié dans le backend de WordPress et comment intercepter la sauvegarde des valeurs du site dans afin d'insérer l'appel add_site_option lorsque cela se produit.

Pour le premier problème (l'ajout de champs), j'utilisais normalement l'API de paramètres, plus précisément register_setting et add_settings_field , pour ajouter la nouvelle option à la liste blanche, puis insérer un champ pour cette option dans la page des options appropriée. Mais je ne peux trouver aucune information pour 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 autre fonction qui fait ce qu'elle fait pour les pages Administrateur réseau ou si vous le souhaitez. suffit d'injecter le code HTML manuellement. (Vous pouvez le faire manuellement en écrivant une fonction qui résonne sur le champ, puis en la connectant à l'action "wpmu_options", qui s'exécute à la fin de la page Paramètres dans Admin Réseau. Mais vous devez également gérer les nonces et tout le reste manuellement.)

Le deuxième problème consiste probablement à trouver une action qui s'exécute lorsque l'utilisateur clique sur "Enregistrer" sur la page Paramètres administrateur réseau, mais je n'ai pas encore trouvé cette information. Toute piste serait grandement appréciée.

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

    
posée jalefkowit 05.05.2011 - 20:01

3 réponses

10

Il existe une action wpmu_options qui vous permet d'ajouter davantage de code HTML sur la page Paramètres réseau.

Si vous souhaitez ajouter votre propre sous-menu / page au menu principal 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;  
}

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

    
réponse donnée onetrickpony 06.09.2011 - 17:27
1

En gros, si vous ne voulez pas créer votre propre page de paramètres d’administrateur réseau, vous devrez utiliser les deux hooks 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 enlace

    
réponse donnée RavanH 27.04.2015 - 18:02
0

Je crains que la seule méthode à ma connaissance soit la méthode que vous avez mentionnée consiste à injecter manuellement le code 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.

    
réponse donnée BjornW 06.09.2011 - 14:12

Lire d'autres questions sur les étiquettes