Di kelas plugin saya ingin memberikan bidang sederhana untuk data publik: email, nomor telepon, Twitter dll. Daftar dapat diperpanjang.
Lihat plugin Data Kontak Publik di GitHub untuk detailnya.
Agar penggunaannya sederhana, saya juga ingin menawarkan kode pendek yang mudah diketik:
[public_email]
[public_phone]
[public_something]
Satu-satunya perbedaan adalah bagian kedua. Saya tidak ingin argumen lebih lanjut untuk kode pendek karena mereka rawan kesalahan. Jadi saya mendaftarkan satu penangan kode pendek untuk semua bidang di kelas plugin saya:
foreach ( $this->fields as $key => $value )
{
add_shortcode( 'public_' . $key, array( $this, 'shortcode_handler' ) );
}
Sekarang shortcode_handler()
harus tahu kode pendek mana yang telah dipanggil. Pertanyaan saya adalah: Bagaimana saya melakukan ini?
Solusi saya saat ini adalah fungsi lain:
protected function current_shortcode()
{
$backtrace = debug_backtrace( DEBUG_BACKTRACE_IGNORE_ARGS );
return $backtrace[3]['args'][0][2];
}
Ini ... bekerja untuk the_content()
. Tapi itu tidak elegan dan juga tidak kuat.
Saya telah membaca wp-includes/shortcodes.php
, tetapi sekarang saya tidak bisa melihat bagaimana melakukannya dengan lebih baik.
Jawaban:
Ini belum diuji , tetapi fungsi callback disediakan dengan berbagai argumen,
$args
yang memberikan (jika ada) parameter yang disediakan dengan shortocode. Entri ke nol terkadang berisi nama kode pendek yang digunakan (misalnyapublic_email
). Maksud saya terkadang ...(Lihat Codex ). Untuk keperluan Anda maka
$atts[0]
akan berisipublic_email
,public_phone
dll.sumber
$args
, yang kedua$content
dan yang terakhir kode pendek!$args
. Tetapi jika itu berhasil untuk Anda ...: D.Berdasarkan jawaban Stephen Harris saya membuat tangkapan saya semua penangan menerima argumen ketiga, yaitu nama kode pendek:
Lihat beraksi di plugin yang ditautkan dalam pertanyaan saya.
sumber