Einstellungs-API in Multisite - Fehlende Aktualisierungsnachricht

8

Wenn ich die Einstellungs-API in einer Installation mit mehreren Standorten verwende und die Optionsseite auf Netzwerkebene angezeigt wird, options.phpfunktioniert das Posten der Optionen an nicht, da sich die Verwaltungsseite auf befindet wp-admin/networkund WP erwartet, dass sich die Seite auf befindet wp-admin.

Ich habe eine Funktion hinzugefügt, die prüft, ob es sich bei dieser WP-Installation um eine Multsite-Installation handelt (über die Konstante). Wenn dies der Fall ist, wird der Aktionswert des Formulars in geändert ../option.php. Dadurch werden die Optionen OK gespeichert, aber die Standardmeldung "Einstellungen gespeichert". fehlt (die Abfragezeichenfolge enthält jedoch settings-updated=true).

Irgendwelche Gedanken darüber, wie die Nachricht erscheinen soll?

NightHawk
quelle

Antworten:

11

Für Netzwerkoptionsseiten lautet die korrekte URL für Formularaktionen:

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

Dann müssen Sie einen Rückruf registrieren:

add_action( 
    'network_admin_edit_your_option_name', 
    'your_save_network_options_function' 
);

Überprüfen Sie in dieser Rückruffunktion die $_POSTDaten, bereiten Sie die Werte vor und speichern Sie sie dann:

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

Und dann müssen Sie die Weiterleitung ohne weitere Hilfe erstellen:

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

Überprüfen Sie auf der Optionsseite $_GET['updated'], und fügen Sie einen Administratorhinweis hinzu, wenn Sie diesen Parameter gefunden haben.

Fuxia
quelle
Die Einstellungs-API ist also auf Netzwerkadministrationsseiten nicht verfügbar? Und was @NightHawk ursprünglich getan hatte, war, Optionen im Hauptblog des Netzwerks zu speichern und sie nicht auf der gesamten Website zu speichern, oder?
Parham
@Parham Ich habe seinen Code nicht gesehen, aber ich weiß, dass die meisten Teile der Einstellungs-API entweder nicht auf Netzwerkseiten verfügbar sind oder sich auf seltsame Weise verhalten. Es besteht keine Notwendigkeit, dies zu verwenden.
Fuxia
0

Ich habe die Antwort von @ toscho verwendet, die hervorragend funktioniert. In bestimmten WordPress-Installationspfaden funktioniert die fest codierte URL für Formularaktionen jedoch nicht. Hier gibt @birgire an, wie die richtige URL erstellt wird :

Wenn Sie auf URLs innerhalb des Netzwerkadministrators verweisen, sollten Sie die Datei network_admin_url () berücksichtigen. Kernfunktion, die für Nicht-Multisite-Setups auf admin_url () zurückgreift.

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