¿Cómo agregar un campo para la nueva opción de todo el sitio en la pantalla Configuración de red?

13

Estoy trabajando en un complemento, y parte de él implica establecer un valor de opción que se aplique a todos los sitios en una red de WordPress. Sé sobre add_site_option y Funciones get_site_option que le permiten guardar el valor en la tabla wp_sitemeta, pero lo que no puedo entender es cómo colocar los campos en el lugar apropiado en el backend de WordPress y cómo interceptar el ahorro de los valores de todo el sitio. para insertar la llamada add_site_option cuando eso ocurra.

Para el primer problema (agregando los campos), normalmente usaría la API de configuración, específicamente register_setting y add_settings_field , para incluir en la lista blanca la nueva opción y luego insertar un campo en la página de opciones correspondiente. Pero no puedo encontrar información en ningún lugar sobre si puede usar add_settings_field para agregar un campo a la página de Configuración en la nueva sección de Administración de red del backend, si hay una función alternativa que hace lo que hace por las páginas de Administración de red, o si Solo hay que inyectar el HTML manualmente. (Puede hacerlo manualmente escribiendo una función que haga eco en el campo y luego conecte esa función a la acción "wpmu_options", que se ejecuta al final de la página de Configuración en Network Admin. Pero también tiene que lidiar con los nonces y todo lo demás manualmente.)

Es probable que el segundo problema implique encontrar una acción que se ejecute cuando el usuario presione "Guardar" en la página de configuración del administrador de red, pero aún no he podido encontrarlo. Cualquier pista sería muy apreciada.

Entonces, ¿pensamientos? ¿Existe una manera elegante de permitir la administración de las opciones de todo el sitio para un complemento a través del área de administración de red nueva? Si es así, ¿cómo se hace?

    
pregunta jalefkowit 05.05.2011 - 20:01

3 respuestas

10

Hay una acción wpmu_options que te permite agregar más HTML en la página de configuración de red.

Si desea agregar su propio submenú / página al menú principal de Configuración:

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
}

el controlador de guardar:

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

Guarde el controlador de guardado si elige usar la acción que mencioné anteriormente y enganche el formulario a esa acción.

    
respondido por el onetrickpony 06.09.2011 - 17:27
1

Básicamente, si no desea crear su propia página de configuración de administrador de red, deberá usar los dos enlaces mencionados por separado en las otras dos respuestas:

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 obtener una explicación muy clara y un ejemplo de código útil, vea enlace

    
respondido por el RavanH 27.04.2015 - 18:02
0

Me temo que el único método que conozco es el método que mencionó inyectar manualmente el html y lidiar con las actualizaciones de las opciones usted mismo. La acción que debe utilizar para guardar sus opciones es update_wpmu_options. Si es necesario, puedo proporcionar un ejemplo más detallado, solo hágamelo saber.

    
respondido por el BjornW 06.09.2011 - 14:12

Lea otras preguntas en las etiquetas