Como adicionar campo para a nova opção de todo o site na tela Configurações de Rede?

13

Estou trabalhando em um plug-in e parte dele envolve a configuração de um valor de opção que se aplica a todos os sites em uma rede do WordPress. Conheço as add_site_option e get_site_option funções que permitem salvar o valor na tabela wp_sitemeta, mas o que não consigo descobrir é como colocar os campos no local apropriado no backend do WordPress e como interceptar a gravação de valores de todo o site em para inserir a chamada add_site_option quando isso acontecer.

Para o primeiro problema (adicionar os campos), normalmente usaria a API de configurações, especificamente register_setting e add_settings_field , para colocar na lista de permissões a nova opção e então inserir um campo para ela na página de opções apropriada. Mas não consigo encontrar informações em qualquer lugar sobre se você pode usar add_settings_field para adicionar um campo à página Configurações na nova seção Administrador de Rede do back-end, se houver uma função alternativa que faça o que faz para as páginas do Administrador de Rede ou se basta injetar o HTML manualmente. (Você pode fazê-lo manualmente, escrevendo uma função que ecoa o campo e, em seguida, conectando essa função à ação "wpmu_options", que é executada no final da página Configurações no Administrador da Rede. Mas também é preciso lidar com nonces e tudo mais manualmente.)

O segundo problema provavelmente envolve encontrar uma ação que é executada quando o usuário acessa "Salvar" na página Configurações de administração de rede, mas ainda não consegui encontrá-lo. Qualquer pista seria muito apreciada.

Então - pensamentos? Existe uma maneira elegante de permitir o gerenciamento de opções em todo o site para um plug-in através da nova área Administrador de Rede? Se sim, como se faz?

    
por jalefkowit 05.05.2011 / 20:01

3 respostas

10

Há uma ação wpmu_options que permite adicionar mais HTML na página "Configurações de rede".

Se você quiser adicionar seu próprio submenu / página ao menu principal "Configurações":

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
}

o manipulador de salvamento:

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

Mantenha o manipulador de salvamento, se você optar por usar essa ação que mencionei acima, e conecte o formulário a essa ação.

    
por onetrickpony 06.09.2011 / 17:27
1

Basicamente, se você não quiser criar sua própria página de configurações de administrador de rede, precisará usar os dois ganchos mencionados separadamente nas outras duas respostas:

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
}

Para uma explicação muito clara e uma amostra de código útil, consulte enlace

    
por RavanH 27.04.2015 / 18:02
0

Eu tenho medo de que o único método que conheço seja o método que você mencionou de injetar manualmente o html e lidar com as atualizações das opções você mesmo. A ação que você precisa usar para salvar suas opções é update_wpmu_options. Se necessário, posso fornecer um exemplo mais detalhado, apenas me avise.

    
por BjornW 06.09.2011 / 14:12