web-dev-qa-db-fra.com

Comment ajouter un nouveau titre?

Je travaille sur un plugin, dont une partie implique la définition d'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 je ne vois pas comment placer les champs à l'emplacement approprié dans le backend de WordPress, et comment intercepter l'enregistrement des valeurs à l'échelle du site afin d'insérer l'appel add_site_option lorsque cela se produit.

Pour le premier problème (l'ajout des champs), j'utilisais normalement l'API Settings, en particulier register_setting et add_settings_field , pour ajouter la nouvelle option à la liste blanche, puis pour l'insérer dans la page d'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 - des 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?

14
jalefkowit

Il existe une action wpmu_options qui vous permet d'ajouter davantage de 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;  
}

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

10
onetrickpony

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 http://zao.is/2013/07/adding-settings-to-network-settings-for-wordpress-multisite/

1
RavanH

Je crains que la seule méthode que je connaisse soit la méthode que vous avez mentionnée consistant à 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.

0
BjornW