Situasi: Saya sedang mengerjakan sebuah plugin dan saya mengembangkannya sebagai sebuah kelas, semuanya bekerja dengan baik sampai saya mengalami situasi ini. Saya ingin membuat segalanya lebih bersih dan mencoba ini ..
class MyPlugin {
function __construct() {
add_action('admin_menu', array(&$this, 'myplugin_create_menus');
}
//I don't want to write a function for every options page I create
//so I prefer to just load the content from an external file.
function load_view($filename) {
$view = require(dirname(__FILE__).'/views/'.$filename.'.php');
return $view;
}
//Here is where the problem comes
function myplugin_create_menus() {
add_menu_page( 'Plugin name',
'Plugin name',
'manage_options',
'my-plugin-settings',
array(&$this, 'load_view') // Where do I specify the value of $filename??
);
}
}#end of class
Saya sudah mencoba banyak opsi berbeda tetapi tidak ada yang berhasil, mungkin saya ada di depannya tetapi saya tidak bisa melihatnya.
Tentu saja ini adalah kreasi ulang, saya telah mengawali semua fungsi saya dan mereka tidak persis seperti yang saya tulis di sini tapi saya harap Anda mendapat ide yang saya minta.
Terima kasih sebelumnya.
PD: Jika Anda ingin melihat kode sumber asli saya akan dengan senang hati menempelkannya dan memberi Anda tautan.
Anda selalu bisa menggunakan fungsi anonim (atau penutupan). Sesuatu yang mempengaruhi:
sumber
function() use ($my_var) { // now you can use $my_var }
fungsi load_view harus seperti ini ?:
dan di file sertakan Anda itu harus menggemakan konten apa pun untuk halaman yang ditampilkan.
EDIT:
Berikut adalah apa kata kodeks tentang masalah ini:
$menu_slug (string) (required)
Nama siput untuk merujuk ke menu ini oleh (harus unik untuk menu ini). Sebelum Versi 3.0 ini disebut parameter file (atau handle). Jika parameter fungsi dihilangkan, menu_slug harus berupa file PHP yang menangani tampilan konten halaman menu. Default: Tidak Ada$function
Fungsi yang menampilkan konten halaman untuk halaman menu. Secara teknis, parameter fungsi adalah opsional, tetapi jika tidak disediakan, maka WordPress pada dasarnya akan menganggap bahwa menyertakan file PHP akan menghasilkan layar administrasi, tanpa memanggil fungsi. Sebagian besar penulis plugin memilih untuk menempatkan kode penghasil halaman dalam suatu fungsi di dalam file plugin utama mereka.: Jika parameter fungsi ditentukan, dimungkinkan untuk menggunakan string apa pun untuk parameter file. Ini memungkinkan penggunaan halaman seperti? Page = my_super_plugin_page bukan? Page = my-super-plugin / admin-options.php.Jadi yang saya dapat kumpulkan dari ini adalah bahwa jika Anda membiarkan fungsi kosong itu mencoba untuk memasukkan file php berdasarkan apa yang telah Anda atur
menu_slug
untuk.EDIT 2
sumber
filename
variabelnya agar selalu seperti itu"somethingelse"
. Suntingan pertama Anda bisa menjadi trik di sini: jikaload_view
tidak melakukan apa pun kecuali untuk menyertakan file, Anda memang seharusnya tidak melewati fungsi panggilan balik dan WordPress akan mencoba memuat halaman yang Anda lewati sebagai siput.Saya memecahkan masalah ini dengan hanya menambahkan ID (atau data apa pun yang Anda perlukan) ke siput menu.
Sebagai contoh:
Ini kemudian akan membuat URL dengan 'my-plugin-settings-filename' (sebagai contoh), dan saya bisa mem-parsing bagian URL itu (dengan $ _GET atau filter_input).
sumber
Berdasarkan jawaban user35752 , Anda bahkan dapat menggunakan metode objek dengan params sebagai panggilan balik.
sumber