API de configuración en multisitio: mensaje de actualización faltante

8

Cuando uso la API de configuración en una instalación multisitio y la página de opciones se encuentra en el nivel de red, publicar las opciones en options.phpno funciona, porque la página de administración se encuentra en wp-admin/networky WP espera que la página esté en wp-admin.

Agregué una función que verifica si esta instalación de WP es una instalación de múltiples sitios (a través de la constante) y, si lo es, cambia el valor de acción del formulario a ../option.php. Esto guarda las opciones OK, pero el mensaje predeterminado "Configuraciones guardadas". falta (sin embargo, la cadena de consulta sí incluye settings-updated=true).

¿Alguna idea sobre cómo hacer que aparezca el mensaje?

Chotacabras
fuente

Respuestas:

11

Para las páginas de opciones de red, la URL de acción de formulario correcta es:

wp-admin/network/edit.php?action=your_option_name

Luego debe registrar una devolución de llamada:

add_action( 
    'network_admin_edit_your_option_name', 
    'your_save_network_options_function' 
);

En esa función de devolución de llamada, inspeccione los $_POSTdatos, prepare los valores y guárdelos:

update_site_option( $this->option_name, $this->option_values );

Y luego debes crear la redirección sin más ayuda:

// redirect to settings page in network
wp_redirect(
    add_query_arg(
        array( 'page' => 'your_options_page_slug', 'updated' => 'true' ),
        (is_multisite() ? network_admin_url( 'admin.php' ) : admin_url( 'admin.php' ))
    )
);
exit;

En la página de opciones, verifique $_GET['updated']y agregue un aviso de administrador si encontró ese parámetro.

fuxia
fuente
¿Entonces la API de configuración no está disponible en las páginas de administración de red? Y lo que @NightHawk había hecho originalmente era guardar opciones en el blog principal de la red y no guardarlas en todo el sitio, ¿verdad?
Parham
@Parham No he visto su código, pero sé que la mayoría de las partes de la API de configuración no están disponibles en las páginas de red o se comportan de manera extraña. No hay necesidad de usar eso.
fuxia
0

He estado usando la respuesta de @ toscho que funciona muy bien, sin embargo, en ciertas rutas de instalación de WordPress, la URL de acción de formulario codificada no funcionará. Aquí @birgire indica cómo construir la URL correcta :

Al referirse a las URL dentro de la red-admin, debe considerar network_admin_url (). función principal, que recurre a admin_url () para configuraciones no multisitio.

echo esc_url( 
    add_query_arg( 
       'action', 
       'your_option_name', 
       network_admin_url( 'edit.php' ) 
    )
);
jgangso
fuente