Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. WordPress Plugins
Code

Mewujudkan Halaman Pentadbiran WordPress Custom, Bahagian 3

by
Difficulty:IntermediateLength:LongLanguages:
This post is part of a series called Creating Custom WordPress Administration Pages.
Creating Custom WordPress Administration Pages, Part 2
Creating Custom WordPress Administration Pages, Part 4

Malay (Melayu) translation by Aisyah Arrafah (you can also view the original English article)

Dalam siri ini, kami telah melihat cara membuat halaman pentadbiran tersuai di WordPress tanpa menggunakan API Tetapan. Ini bukan untuk mengatakan API Tetapan tidak berguna (kerana ia!), Tetapi mungkin ada masa apabila kita perlu melaksanakan beberapa fungsi tersuai atau pelaksanaan khusus ciri-ciri yang API yang tidak mampu.

Di samping itu, kami sedang melihat beberapa prinsip pembangunan perisian yang paling penting, seperti prinsip tanggungjawab tunggal, dan menggunakannya untuk kerja kami.

Sekiranya anda baru menyertai siri ini, saya mencadangkan membaca jawatan terdahulu agar anda tahu apa yang telah kami lakukan hingga ini dan anda boleh memahami mengapa kami membuat beberapa keputusan yang kami membuat ketika menulis kod kami.

Kajian Pantas

Walaupun saya tidak dapat merumuskan segala yang telah kita pelajari dalam siri ini, saya boleh memastikan bahawa saya menyerlahkan perkara-perkara penting.

  • Kami telah memperkenalkan plugin teras dan menambah halaman butiran dan pilihan submenu untuk plugin di papan pemuka WordPress.
  • Kami telah membincangkan prinsip tanggungjawab tunggal dan peranan yang dimainkannya dalam pembangunan kami.
  • Satu elemen masukan telah ditambahkan yang akan menerima input pengguna.
  • Kami telah menambahkan nilai nonce ke halaman, tetapi kami tidak sebenarnya melakukan apa-apa dengannya.

Dengan semua itu, saya mengandaikan bahawa anda mempunyai versi terkini kod sumber (yang boleh didapati sebagai lampiran dalam artikel sebelumnya) dan anda bersedia bergerak ke hadapan.

Sebelum Kami Mulakan

Seperti artikel lain, saya mengandaikan bahawa anda mempunyai persekitaran pembangunan WordPress tempatan yang ditubuhkan pada mesin anda.

Selain itu, saya menganggap bahawa anda mempunyai versi terkini kod sumber dan anda bersedia untuk terus membina di atasnya atau anda selesa membaca melalui kod yang ada di sini dan melaksanakannya apabila anda mempunyai lebih banyak masa.

Akhirnya, kami akan melangkah setiap bit kod secara bertahap. Pertama, saya akan bercakap tentang apa yang akan kita lakukan, kemudian saya akan menunjukkan kod itu, dan kemudian saya akan menerangkan apa sahaja kod itu berbuat demikian tidak ada yang tersisa yang boleh mengelirukan.

Walau bagaimanapun, jika anda mendapati diri anda keliru tentang apa-apa dalam kod dan tutorial tidak melakukan kerja yang baik untuk menerangkan apa yang sedang berlaku, maka sila tinggalkan komen dan saya pasti akan menindaklanjuti dengan anda.

Mari kita mulakan.

Melaksanakan Ciri-ciri Baru

Dalam artikel terakhir, kami berhenti dengan plugin yang kelihatan seolah-olah ia melakukan sesuatu tetapi sebenarnya tidak menyimpan apa-apa ke pangkalan data, apalagi mengambil apa-apa dari pangkalan data.

Pendek kata, kami mempunyai plugin yang kelihatan berfungsi tetapi tidak. Dan di sinilah kita akan mengambil tutorial ini.

Khususnya, kita akan menangani topik berikut:

  • Kami akan mengesahkan nilai bukan yang kami buat dan ditakrifkan dalam tutorial sebelumnya untuk mendapatkan pemahaman tentang bagaimana satu komponen keselamatan WordPress berfungsi.
  • Kami akan mengesahkan bahawa pengguna sedia ada mempunyai kebenaran untuk benar-benar menyerahkan maklumat (dan menghalang mereka daripada melakukannya, jika tidak).
  • Jika penyerahan adalah selamat dan pengguna mempunyai kebenaran, kami akan membersihkan maklumat tersebut untuk memastikan tiada kandungan berniat jahat masuk ke dalam pangkalan data.

Dengan itu sebagai pelan hala tuju kami, kami bersedia melompat kembali ke kod dan teruskan kerja pada plugin.

Keselamatan

Ingat dari jawatan terdahulu, kami memanfaatkan fungsi WordPress API wp_nonce_field. Fungsi tertentu ini adalah seperti berikut:

Medan nonce digunakan untuk mengesahkan bahawa kandungan permintaan borang datang dari tapak semasa dan bukan di tempat lain. A nonce tidak menawarkan perlindungan mutlak, tetapi harus melindungi terhadap kebanyakan kes. Ia adalah sangat penting untuk menggunakan bidang nonce dalam bentuk.

Jika anda cuba menyelamatkan halaman pilihan, anda mungkin akan dibentangkan dengan skrin putih. Itu tidak pernah baik, tetapi itu yang kami harapkan memandangkan keadaan semasa plugin kami.

Kita perlu memperkenalkan fungsi yang akan menjadi salah satu cangkuk WordPress yang ada, dan akan memeriksa sama ada nilai nonce adalah sah. Sekiranya ia sah, maka ia akan membolehkan kita meneruskan dengan menyimpan maklumat; sebaliknya, ia tidak sepatutnya membiarkan kami meneruskan.

Oleh kerana kita berada dalam perniagaan mewujudkan halaman pentadbiran tersuai, kita akan memerlukan cangkuk yang berbeza daripada yang kita gunakan untuk digunakan dalam situasi seperti ini. Dalam contoh ini, kami akan menggunakan hook admin_post.

Kebakaran pada permintaan pos pentadbiran yang disahkan di mana tiada tindakan dibekalkan.

Ingatlah dari perbincangan kami yang terdahulu, walaupun, kami tidak mahu membebani kelas dengan lebih banyak tanggungjawab daripada yang diperlukan. Ingat, persoalan yang mesti kita selalu tanya diri ialah: ''Apakah sebab mengapa kelas ini perlu berubah?''

Sekarang, kita tidak mempunyai kelas yang boleh menguruskan pilihan penjimatan. Jadi mari kita memperkenalkan satu. Dalam direktori admin plugin, mari buat kelas Serializer. Ini akan bertanggungjawab untuk menjimatkan nilai pilihan kami.

The Serializer class in our plugin directory

Seperti yang anda lihat, saya telah menamakan file saya class-serializer.php. Kami tahu dari pengalaman dan dari kod di atas bahawa ia perlu untuk memasukkan ke dalam cangkuk admin_post yang disebutkan di atas, dan kami tahu bahawa kami akan memerlukan fungsi yang bertanggungjawab untuk menyimpan maklumat.

Mari kita tentukan orang sekarang.

Jelas sekali, masih ada kerja yang perlu dilakukan (sebenarnya, kami tidak menamakan kelas ini!) tetapi kod di atas mungkin cukup untuk melihat di mana kita menuju.

Perbualan Cepat Mengenai Ketergantungan

Sebelum kami menambah fungsi apa-apa, mari kita teruskan dan tetapkannya apabila plugin kami dimuatkan terlebih dahulu. Pertama, kembalikan adat-admin-settings.php. Sekarang, pada ketika ini, kita perlu bertanya kepada diri sendiri jika mana-mana kelas sedia ada kita harus mempunyai Serializer sebagai kebergantungan.

Saya fikir bahawa satu kes boleh dibuat bahawa Submenu_Page sepatutnya merujuk kepada pengatur cara sejak halaman mempunyai pilihan untuk disimpan.

Sebagai alternatif, ia juga mungkin untuk meninggalkan fail ini sepenuhnya berasingan dan memilikinya untuk corak lain. Sekiranya kita berbuat demikian, kita akan menyimpang dari topik di tangan. Walaupun saya fikir ia penting, ia berada di luar skop perkara yang kami mahu lakukan.

Jadi mari kita instantiate kelas Serializer, mulakannya, dan kemudian lulus ke dalam pembina halaman submenu. Kod dalam fail bootstrap plugin kini seharusnya kelihatan seperti ini:

Dengan itu, kami bersedia untuk terus menyelamatkan pilihan kami.

Kembali ke Pembangunan

Mari kembali ke Serializer. Sekarang bahawa kita telah mendapat kabel sehingga seluruh plugin, sudah tiba masanya untuk menulis beberapa kod jadi, seperti komen yang dicadangkan, mari kita mengesahkan nilai nonce yang kita buat di bahagian depan.

Untungnya, WordPress membuat ini mudah melalui fungsi API terbina dalam: wp_verify_nonce. Fungsi ini menerima dua hujah:

  1. Aksi
  2. Nama

Jika anda ingat dari artikel sebelumnya, kami menggunakan acme-settings-save sebagai tindakan kami dan acme-custom-message sebagai nilai nonce kami. Untuk mengesahkannya, kami perlu menyemak bahawa ia wujud dalam koleksi $_POST dan bahawa ia melewati cek asli WordPress.

Untuk melakukan ini, saya suka mencipta satu kaedah peribadi yang membolehkan saya merangkum logik ini menjadi fungsi yang boleh saya gunakan dalam fungsi simpan yang telah kami tentukan di atas.

Sebaik sahaja selesai, saya boleh memasukkan panggilan ke fungsi ini yang akan membolehkan kami menyemak kesahan penyerahan dan sama ada keluar dari rutin atau teruskan ke pemeriksaan seterusnya (yang akan kami lakukan seketika).

Perhatikan bahawa sekadar mengembalikan palsu dalam syarat ini bukan cara yang sesuai untuk mengendalikan ini. Sebaliknya, ia akan lebih bersih untuk memperkenalkan mesej ralat yang memaparkan di papan pemuka WordPress. Ini adalah sesuatu yang akan kita semak semula dalam tutorial masa depan.

Buat masa sekarang, kami amat prihatin dengan memastikan kami dapat mengemukakan data dengan jayanya. Ini membawa kami ke bahagian seterusnya kod kami.

keizinan

Walaupun nombor yang digunakan sekali (atau pengesahan bukan) diperiksa, masih ada satu lagi perkara yang perlu kita periksa: kita perlu memastikan pengguna semasa mempunyai kebenaran menyimpan data.

Untuk tujuan kami, kami ingin memastikan pengguna kini menjadi pentadbir. Untuk melakukan ini, kita dapat melihat keupayaan pengguna semasa (anda dapat melihat halaman ini menyediakan rujukan untuk setiap peranan dan keupayaan yang berkaitan).

Perhatikan bahawa salah satu keupayaan pentadbiran adalah untuk menguruskan pilihan. Kita kini boleh menggunakan fungsi WordPress API current_user_can untuk memeriksa untuk mengetahui sama ada pengguna semasa boleh menyimpan pilihan pada halaman ini.

Tetapi pertama, ini menimbulkan persoalan: Jika pengguna tidak dapat menyimpan pilihan, mengapa mereka dibenarkan untuk melihat halaman tersebut di tempat pertama?

Jika anda ingat dari sebelumnya dalam siri ini, kami menulis kod berikut:

Ini memastikan bahawa halaman ialah pilihan hanya tersedia untuk pentadbir; Walau bagaimanapun, kami mahu menjadi lebih berhati-hati dan membuat pemeriksaan ini semasa proses bersiri kami juga.

Sekarang kita boleh mengemas kini bersyarat di mana kita juga menyemak nilai nonce juga untuk memeriksa kebenaran pengguna semasa:

Sekarang kita mempunyai kod untuk memastikan nilai nonce ditetapkan dan pengguna semasa boleh menyimpan nilai, kita boleh bergerak maju dengan sanitasi.

Ingat, kami akan kembali ke tempat di mana ia mengatakan kami perlu memaparkan mesej ralat. Tetapi itu tidak dalam tutorial ini.

sanitasi

''Tetapi tunggu,'' kata kamu. ''Saya fikir kami bersiap sedia untuk menyelamatkan pilihan!'' Kita, tetapi sebelum kita dapat melakukannya, kita perlu menjalani proses sanitasi. Singkatnya, sanitasi adalah idea memastikan data bersih, selamat, dan sihat, kebersihan untuk pangkalan data.

Ringkasnya, ia menghalang pengguna yang berniat jahat daripada memasukkan maklumat ke pangkalan data yang akhirnya boleh menjejaskan laman web kami secara negatif.

Syukurlah, WordPress menyediakan fungsi penolong yang baik yang membolehkan kami memastikan ini semudah mungkin. Bagi mereka yang berminat, anda boleh membaca semua tentang data pengesahan dan sanitasi (walaupun kami akan melihat pengesahan dalam tutorial seterusnya).

Dalam kod kami, kami akan menggunakan sanitize_text_field (seperti yang dihubungkan di atas). Fungsi ini akan dilakukan seperti berikut:

  • Cek untuk UTF-8 tidak sah
  • Mengonversi satu karakter `<` ke entitas
  • Jalur semua tag
  • Mengeluarkan garis pemisah, tab, dan ruang kosong tambahan
  • Jalur oktet

Cukup bagus untuk mendapatkannya, bukan? Mari letakkan ini untuk berfungsi. Untuk melakukannya, cari fungsi simpan yang telah kami bekerjasama dan kemas kini supaya kelihatan seperti ini:

Perhatikan bahawa kami membaca input dari koleksi $_POST, membersihkannya, dan kemudian menyimpan hasil dalam pembolehubah berasingan. Seterusnya, pemboleh ubah tersebut ditulis ke pangkalan data menggunakan fungsi update_option.

Untuk artikel ini, saya memilih untuk menggunakan tutsplus-custom-data utama. Walau apa pun yang anda gunakan, adalah penting bahawa ia mempunyai awalan dengan sesuatu yang unik supaya satu lagi plugin atau tema tidak menulis ganti pilihan dan anda tidak menulis ganti pilihan sedia ada.

Akhirnya, kita perlu mengarah semula ke halaman pilihan. Oleh kerana kami tidak menggunakan API terbina dalam, kami perlu menulis fungsi untuk melakukan ini untuk kami. Nasib baik, sangat mudah.

Pertama, buat fungsi yang dinamakan redirect, dan pastikan ia kelihatan seperti ini:

Kod di atas harus jelas, tetapi untuk memastikan ia jelas, ia melakukan perkara-perkara berikut:

  1. Ia menyemak untuk memastikan nilai WordPress peribadi tersedia dalam koleksi $_POST. Jika ia tidak ditetapkan, maka ia akan menetapkannya sama dengan URL log masuk WordPress. Ini akan memaksa orang ke halaman log masuk jika URL rujukan tidak ditetapkan; Walau bagaimanapun, tidak ada sebab mengapa ia tidak sepatutnya.
  2. Seterusnya, kami mengambil rujukan dan membasmi data. Ini adalah sesuatu yang dipanggil standard pengekodan, dan ia memastikan data bersih.
  3. Akhirnya, kami memulakan wp_safe_redirect ke URL supaya kami dikembalikan ke halaman pilihan.

Setelah semua ini dilakukan, tambahkan ini sebagai baris terakhir dalam fungsi simpan di atas. Versi akhir kod harus terlihat seperti ini:

Inilah perkara: Kami mendapat keselamatan, sanitasi, bersiri, dan pengalihan di tempat. Tetapi kami tidak menunjukkan mesej ralat, dan kami tidak mengambil data.

Di sinilah kita akan mengambil tutorial seterusnya.

Kesimpulan

Pada ketika ini, kami mempunyai plugin separuh berfungsi, tetapi masih banyak lagi yang perlu dilakukan. Jelas, maklumat yang kami hantar ke pangkalan data tidak dipaparkan di mana-mana, dan itu bukan perkara yang baik.

Tetapi sama seperti menyimpan maklumat, ada perkara-perkara penting untuk dipertimbangkan ketika mendapatkan maklumat. Dalam tutorial seterusnya, kami akan melihat mendapatkan maklumat, memaparkannya di depan, memaparkannya pada halaman pilihan, dan juga mengemas kini maklumat sebagai pengguna mengubah nilai elemen input.

Sementara itu, jika anda sedang mencari utiliti lain untuk membantu anda membina set alat anda yang semakin berkembang untuk WordPress atau kod untuk belajar dan menjadi lebih pandai dalam WordPress, jangan lupa untuk melihat apa yang kami ada di Envato Pasaran.

Ingat, anda boleh menangkap semua kursus dan tutorial saya di halaman profil saya, dan anda boleh mengikuti saya di blog dan / atau Twitter saya di @tommcfarlin di mana saya bercakap mengenai pelbagai amalan pembangunan perisian dan bagaimana kita boleh menggunakannya di WordPress.

Akhirnya, jangan teragak-agak untuk meninggalkan apa-apa soalan atau komen dalam suapan di bawah. Saya melakukan yang terbaik untuk menyertai dan menjawab setiap soalan atau kritikan yang anda tawarkan kerana ia berkaitan dengan projek ini.

Sumber

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.