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.