Saya memiliki jenis pos kustom (CPT) yang disebut event
. Saya memiliki kotak meta untuk tipe dengan beberapa bidang. Saya ingin memvalidasi beberapa bidang sebelum menerbitkan acara. Misalnya, jika tanggal suatu acara tidak ditentukan, saya ingin menampilkan pesan kesalahan yang informatif, menyimpan acara untuk diedit di masa depan, tetapi mencegah agar acara tersebut tidak dipublikasikan. Apakah status 'tertunda' untuk posting CPT tanpa semua info yang diperlukan adalah cara yang tepat untuk mengobatinya?
Apa praktik terbaik untuk melakukan validasi bidang CPT dan mencegah posting tidak dipublikasikan, tetapi simpan untuk diedit di masa mendatang.
Terima kasih banyak, Dasha
Jawaban:
Anda dapat menghentikan kiriman dari menyimpan semua bersama-sama dengan peretasan JQuery kecil dan memvalidasi bidang sebelum menyimpan di sisi klien atau sisi server dengan ajax:
pertama-tama kita menambahkan JavaScript untuk menangkap acara kirim / terbitkan dan menggunakannya untuk mengirimkan fungsi ajax kita sendiri sebelum pengiriman yang sebenarnya:
lalu kita buat fungsi untuk melakukan validasi aktual:
Anda selalu dapat mengubahnya sedikit untuk melakukan validasi hanya untuk jenis posting Anda dengan menambahkan pemeriksaan bersyarat untuk
my_publish_admin_hook
fungsi untuk jenis posting Anda dan untuk memvalidasi di sisi klien tetapi saya lebih suka di sisi server.sumber
pre_submit_validation
cocoknya.my_publish_admin_hook
Blok pertama memang memotong sisi klien pengiriman kiriman - tetapi kemudian membuat panggilan AJAX ke server (pra-resmi-kirim masukpre_submit_validation
) yang melakukan validasi sisi server.Ada dua langkah untuk metode ini: pertama, fungsi untuk menyimpan data lapangan metabox khusus Anda (terhubung ke save_post), dan kedua, fungsi untuk membaca post_meta baru (yang baru saja Anda simpan), validasi, dan modifikasi hasil dari menyimpan sesuai kebutuhan (juga terhubung ke save_post, tetapi setelah yang pertama). Fungsi validator, jika validasi gagal, sebenarnya mengubah post_status segera kembali ke "pending", secara efektif mencegah posting dipublikasikan.
Karena fungsi save_post dipanggil banyak, setiap fungsi memiliki pemeriksaan untuk hanya mengeksekusi ketika pengguna bermaksud untuk mempublikasikan, dan hanya untuk jenis posting khusus Anda (mycustomtype).
Saya juga biasanya menambahkan beberapa pesan pemberitahuan khusus untuk membantu pengguna mengetahui mengapa posting mereka tidak dipublikasikan, tetapi yang agak rumit untuk dimasukkan di sini ...
Saya belum menguji kode persis ini, tetapi ini adalah versi yang disederhanakan dari apa yang telah saya lakukan dalam pengaturan jenis pos kustom berskala besar.
Untuk beberapa bidang metabox, cukup tambahkan lebih banyak penanda penyelesaian dan ambil lebih banyak post_meta dan lakukan lebih banyak tes ..
sumber
Anda harus memeriksa / memvalidasi nilai bidang meta Anda di ajax yaitu ketika pengguna menekan tombol "Terbitkan / Perbarui". Di sini saya memvalidasi produk woocommerce yang memiliki bidang meta "product_number" untuk nilai kosong.
Setelah itu tambahkan fungsi ajax handler,
sumber
Hanya ingin menambahkan itu untuk membaca variabel posting, menggunakan solusi Bainternet, Anda harus menguraikan string dalam
$_POST['form_data']
menggunakanparse_str
fungsi PHP (hanya untuk menghemat waktu penelitian).Kemudian Anda dapat mengakses setiap variabel hanya menggunakan
$varname
. Misalnya, jika Anda memiliki bidang meta yang disebut "my_meta" Anda akan mengaksesnya seperti ini:sumber