Saya terus-menerus mengalami gangguan yang sama, jadi saya pikir saya akan melihat apakah ada ide atau pengalaman di luar sana ...
Saya telah membuat plugin yang menggunakan halaman admin itu sendiri. Itu harus. Sekarang saya telah memilah-milah hal-hal WP_List_Table (), saya harus mengatakan itu bagus ... tapi ....
Halaman plugin khusus selalu dimuat seolah- admin.php?page=...
olah saya tidak ingin memuatnya dari direktori plugin secara langsung, yang tidak saya lakukan. Sekarang jika saya melakukan 'tindakan' dari halaman itu, saya perlu memprosesnya dan kemudian mengarahkan kembali ke halaman tanpa parameter tindakan. Tidak masalah jika saya melakukan GET atau POST, sungguh.
Pada semua halaman internal WP melakukan ini pada halaman yang sama, memeriksa apakah ada tindakan, jika demikian memprosesnya dan kemudian mengalihkan ke dirinya sendiri tanpa tindakan. Ini dimungkinkan, karena pada halaman-halaman admin-header
ini belum dimuat.
Jika Anda mencoba melakukannya di halaman Anda sendiri, setengah dari antarmuka admin telah dikirim ke browser, jadi pengalihan tidak mungkin lagi. Jelas, solusinya adalah POST / DAPATKAN langsung ke halaman lain, muat kerangka WP itu, lakukan pemrosesan dan kemudian arahkan kembali ke halaman asli ... tapi ... itu agak mengganggu, karena ... asli saya Halaman dimuat melalui callback, jadi itu berjalan dalam metode kelas saya. Itu indah.
Jika saya memuat halaman terpisah, saya harus secara manual memasukkan wp-load.php
dan berada di luar kelas saya, yang menjengkelkan, dan dalam kasus khusus saya mengganggu saya terutama, karena saya hanya instanciating kelas plugin saya secara anonim sehingga tidak ada yang dapat mengaksesnya dari luar.
Jadi setelah cerita panjang ini ... apakah ada yang datang dengan solusi yang baik untuk memuat halaman lain melalui panggilan balik tanpa seluruh antarmuka admin sudah diatur di sekitarnya?
(Saya tahu solusinya ... saya dapat mengaitkan fungsi ke dalam load-....
yang memeriksa parameter tindakan dan melakukan pemrosesan dan redirect. Tapi saya ingin tahu apakah ada cara yang lebih baik.)
Terima kasih.
[plugin-wp-pagenavi]
?[plugin-development]
tentu diterima di sini.plugin-wp-pagenavi
... saya berasumsi itu untuk hal-hal yang menyangkut korelasi antara plugin dan menu admin. Karena pertanyaan saya terkait dengan itu, saya memilih tag itu.[admin-menu]
sini, tapi saya rasa itu tidak ada hubungannya dengan itu. Saya mengubah tag sesuai keinginan saya, tentu saja Anda bisa mengeditnya lagi.Jawaban:
Sebagai aturan praktis, Anda harus menggunakan permintaan POST untuk sebagian besar tindakan, untuk memastikan mereka tidak dieksekusi secara tidak sengaja . Tetapi ini juga merupakan praktik yang baik untuk mengalihkan ke halaman normal setelah permintaan POST, untuk mencegah eksekusi duplikat ketika pengguna me-refresh halaman.
Jadi alirannya seperti ini:
Halaman tengah tidak harus menjadi halaman plugin Anda. Ini berarti bahwa Anda dapat menggunakan "generik POST handler" yang disertakan tiga tahun lalu, yang
'admin_action_' . $_REQUEST['action']
kait diadmin.php
.Contoh pengguna adalah plugin Akismet . Jika Anda ingin menggunakannya dengan andal, Anda harus mengirim
admin.php
langsung , bukan ke halaman lain yang kebetulan disertakanadmin.php
.Berikut ini adalah contoh yang sangat mendasar tentang bagaimana menggunakannya:
sumber
admin.php
langsung adalah "trik" yang diajarkan oleh sumber Akismet kepada saya. Anda benar ketika Anda menampilkan formulir dan ingin menampilkannya lagi jika terjadi kesalahan: maka akan mudah jika tujuan adalah halaman plugin Anda tetapi kait di suatu tempat di awal (sehingga Anda bisa mengarahkan ulang jika berhasil, atau menampilkan formulir lagi dengan pesan kesalahan jika tidak). Mungkin menyarankannya di tiket Trac?'load-<pagehook>'
kait untuk bekerja ... itu disebut sebelum halaman dimuat ... tetapiadmin_action_...
konsepnya tampak jauh lebih baik dan lebih spesifik. Juga, pada catatan, pesan kesalahan masih bermasalah jika Anda melakukan POST dan tidak ingin memposting ulang saat memuat ulang, tapi itu topik yang berbeda.admin_action_
kail akan dipindahkan sebelum pemuat laman plugin.Saya mendekati ini sedikit berbeda dengan hanya menambahkan noheader = true ke url tindakan pada halaman tempat pengguna mengirimkan tindakan.
Pawang saya kemudian melakukan tindakan (mis. Biasanya tambah, perbarui atau hapus) kemudian selesai dengan wp_redirect () ke tindakan halaman berikutnya (mis. Tambahkan halaman -> edit halaman, hapus halaman -> halaman daftar, edit halaman -> edit halaman ). Saya juga menyampaikan pesan pada URL sehingga saya dapat menampilkan status seperti pembaruan berhasil atau gagal.
Pendekatan ini membuat semua tindakan: daftar, tambahkan, edit, hapus, hapus massal, dll di kelas yang sama dan dengan siput admin yang sama sehingga sangat mudah untuk mempertahankan dan memahami.
sumber
Pendekatan lain yang berbeda adalah menambahkan bidang input tersembunyi ke formulir:
Dengan cara ini, WordPress tampaknya menangani pengalihan secara otomatis.
sumber