Bagaimana seharusnya seseorang menerapkan add_settings_error pada halaman menu khusus?

8

The Professional WordPress Plugin Pengembangan buku menjelaskan secara rinci bagaimana benar menggunakan API Setelan, dan itu juga menunjukkan cara menambahkan Menu dan Submenu, tapi sayangnya itu tidak memberikan contoh bergabung-up ini. Sementara saya berhasil membuat sebagian besar itu berfungsi, saya tidak tahu cara menerapkan add_settings_error dengan benar di halaman Menu kustom. Ini kode saya:

function settings_main_validate( $input ) {
$valid['text_string'] = preg_replace( '/[^a-zA-Z]/', '', $input['text_string'] );

if ( $valid['text_string'] != $input['text_string'] ) {
    //add_setting_error: $title, $id, $error_message, $class
    add_settings_error( 'fields_main_input', 'texterror', 'Incorrect value entered!', 'error' );
}   

return $valid;
}                  

Validasi di atas akan bekerja dengan baik pada pengaturan yang dibuat menggunakan add_options_page, tetapi tidak akan menampilkan kesalahan pengaturan pada halaman yang diberikan add_menu_page.

jnthnclrk
sumber

Jawaban:

8

Ada beberapa komponen untuk pembuatan kesalahan / pemberitahuan dan proses tampilan:

  1. add_settings_error()panggilan untuk menambahkan item ke tumpukan ( $wp_settings_errorsvariabel global ).
  2. settings_errors sementara yang menjaga kesalahan sehingga mereka bertahan bergerak dari halaman ke halaman.
  3. settings_errors()berfungsi get_settings_errors()untuk mengambil kesalahan dari memori atau sementara dan kemudian menampilkannya.

Ini berfungsi seperti pesona untuk Pengaturan API, tetapi sayangnya mereka tidak disetel untuk penggunaan umum. Di sisi lain itu sepele untuk mengatasi itu.

Kaitkan settings_errors()ke admin_noticeshalaman plugin Anda, kirimkan kode kesalahan sehingga hanya menunjukkan barang-barang Anda.

Secara manual menyimpan kesalahan ke settings_errorstransient (hanya hal-hal yang variabel global ke dalamnya).

Karena get_settings_errors()mengharapkan petunjuk dalam parameter GET ( $_GET['settings-updated']) bahwa ia harus memeriksa transient, bukan memori, Anda dapat menyediakan atau mendapatkan kesalahan dari transient sendiri dan menyimpannya kembali ke variabel global sebelum settings_errors()panggilan Anda .

Memperbarui

Anda mengubah ini menjadi sedikit berantakan dengan banyak pertanyaan, jadi saya akan mencoba untuk mengatasi masalah Anda di sini.

Pengaturan API melakukan pekerjaan dengan halaman admin, yang tidak menggunakan bagian pengaturan sebagai dasar. Masalah Anda yang sebenarnya adalah bahwa dalam hal itu pelaporan kesalahan / pemberitahuan tidak berfungsi.

Pertama di sini adalah apa yang terjadi ketika Anda memposting formulir, atur dengan Pengaturan API:

  1. Data akan diposting ke options.phphalaman khusus .
  2. Ada data yang dibersihkan / divalidasi menggunakan panggilan balik.
  3. Setiap kesalahan / pemberitahuan yang muncul selama sanitasi / validasi dikumpulkan dan disimpan secara sementara.
  4. Anda diarahkan kembali ke mana pun Anda berasal .

Sekarang ketika Anda memuat halaman admin memeriksa apakah halaman ini milik bagian Pengaturan dan jika kasing itu berisi options-head.phpfile kecil , yang berkaitan dengan mengambil dan menampilkan pemberitahuan kesalahan.

Jadi satu-satunya hal "tidak berfungsi" pada halaman lain adalah langkah terakhir ini, yang sepele untuk dilakukan sendiri dengan ikhtisar fungsi terkait di atas (saya mungkin masuk ke terlalu banyak detail tentang transient, Anda tidak akan memerlukan itu untuk kasus dasar).

Jarang
sumber
Apakah Anda mengatakan Pengaturan API tidak benar-benar dirancang untuk digunakan dalam menu dan layar admin?
jnthnclrk
@trnsfrmr yah, ini bukan tempat saya untuk mengatakan apakah itu dirancang atau tidak , tapi tentu saja tidak diatur untuk itu secara asli.
Paling lambat
Sial, aku benar-benar salah kalau begitu. Jadi, API Pengaturan hanya untuk layar yang hidup di bawah item menu Pengaturan? Di belakang yang menjelaskan mengapa menggunakannya pada menu khusus sangat rumit.
jnthnclrk
Sepertinya memalukan bahwa semua fitur keren dari Pengaturan API tidak tersedia untuk plugin menggunakan menu khusus.
jnthnclrk
@trnsfrmr yah Anda masih bisa mencoba dan memanfaatkannya, hanya perlu upaya ekstra yang dihabiskan
Rarst
0

Sedikit terlambat, tapi saya baru saja melalui ini. Berdasarkan kode OP, solusi terbaik yang saya temukan adalah memasukkan kode ini:

function your_admin_notices_action() {
    settings_errors( 'fields_main_input' );
}
add_action( 'admin_notices', 'your_admin_notices_action' );

Ini akan menambahkan tampilan pemberitahuan admin ke halaman admin yang dibuat menggunakan add_menu_page

Bev
sumber
-1

Cukup menambahkan

include_once 'options-head.php'; 

ke $ fungsi halaman menu kustom saya tampaknya berfungsi dengan baik untuk menampilkan pesan kesalahan pada halaman menu kustom.

James Smartt
sumber