Pengaturan API di Multisite - Pesan pembaruan tidak ada

8

Ketika saya menggunakan pengaturan API dalam instalasi multisite dan halaman opsi duduk di tingkat jaringan, memposting opsi untuk options.phptidak berfungsi, karena halaman administrasi duduk di wp-admin/networkdan WP mengharapkan halaman berada di wp-admin.

Saya menambahkan fungsi yang memeriksa apakah instalasi WP ini adalah instalasi multsite (melalui konstanta) dan jika ya, ia mengubah nilai tindakan form menjadi ../option.php. Ini menyimpan opsi OK, tetapi pesan default "Pengaturan disimpan." tidak ada (namun, string kueri menyertakan settings-updated=true).

Adakah pemikiran tentang bagaimana cara agar pesan tersebut muncul?

NightHawk
sumber

Jawaban:

11

Untuk halaman opsi jaringan URL aksi formulir yang benar adalah:

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

Maka Anda harus mendaftarkan panggilan balik:

add_action( 
    'network_admin_edit_your_option_name', 
    'your_save_network_options_function' 
);

Dalam fungsi panggilan balik itu memeriksa $_POSTdata, menyiapkan nilainya, lalu menyimpannya:

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

Dan kemudian Anda harus membuat pengalihan tanpa bantuan lebih lanjut:

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

Pada halaman opsi periksa $_GET['updated'], dan tambahkan pemberitahuan admin jika Anda menemukan parameter itu.

fuxia
sumber
Jadi API Pengaturan tidak tersedia di halaman admin jaringan? Dan apa yang semula dilakukan @NightHawk, sebenarnya menyimpan opsi ke blog utama jaringan dan tidak menyimpannya di seluruh situs, bukan?
Parham
@ Patham Saya belum melihat kodenya, tapi saya tahu sebagian besar Pengaturan API tidak tersedia di halaman jaringan, atau mereka berperilaku aneh. Tidak perlu menggunakannya.
fuxia
0

Saya telah menggunakan jawaban @ toscho yang sangat bagus, namun pada jalur pemasangan wordpress tertentu, URL aksi formulir yang dikodekan tidak akan berfungsi. Di sini @birgire menyatakan cara membuat URL yang benar :

Ketika merujuk ke url dalam admin jaringan, Anda harus mempertimbangkan network_admin_url (). fungsi inti, yang jatuh kembali ke admin_url () untuk pengaturan non-multisite.

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