Saya mencoba untuk mendapatkan nilai input dari kode pendek di dalam fungsi yang digunakan oleh filter, tetapi tampaknya tidak berhasil. Inilah yang saya lakukan:
function my_shortcode_function($atts){
$value = $atts['id'];
function filter_value(){
echo $value;
}
add_filter('posts_where','filter_value');
}
add_shortcode('my-shortcode','my_shortcode_function');
Sekarang saya tahu menggunakan $value
di dalam filter_value()
tidak akan berfungsi karena lingkup variabel, tetapi bahkan menggunakan $GLOBALS['value']
tidak berfungsi.
Saya bahkan mencoba menggunakan $value = $atts['id']
di dalam filter_value();
tetapi tidak berhasil juga.
Bagaimana saya bisa menggunakan kode pendek saya suka [my-shortcode id='123']
dan meneruskan nilai 123 ke filter?
Terima kasih.
$GLOBALS['value'] = some value
dan kemudian panggilan$GLOBALS['value']
itu berfungsi, tetapi jika saya mengatur nilai langsung$value = some value
dan kemudian menyebutnya menggunakannya$GLOBALS['value']
tidak berfungsi, sementara itu harus bekerja sesuai dengan manual PHP.$value
ruang lingkup globalglobal $value;
sebelum menginisialisasi nilai. Misalnyaglobal $value; $value = $a['id'];
Lalu di filter yang dapat Anda lakukanglobal $value; echo $value;
Apakah itu membantu?$GLOBALS['value'];
?global
kata kunci. Dalam contoh kami, kami telah bekerja dari dalam lingkup fungsi, sehinggaglobal
kata kunci diperlukan.Berikut adalah beberapa solusi:
Pendekatan # 1
Anda bisa membungkus definisi kode pendek dan
posts_where
panggilan balik filter dalam kelas untuk dapat memberikan nilai yang diberikan antara metode kelas misalnya sebagai variabel pribadi .Pendekatan # 2
Pendekatan lain adalah dengan meneruskan nilai sebagai input ke
WP_Query
dalam panggilan balik kode pendek Anda:dan kemudian dalam filter posts_where Anda, Anda dapat mengaksesnya:
Pendekatan # 3
... atau Anda juga dapat menyesuaikan contoh dengan @the_dramatist untuk dapat menghapus callback sesudahnya dengan menetapkan fungsi anonim ke variabel:
Periksa misalnya dokumen PHP tentang cara menetapkan fungsi anonim, dengan kata kunci penggunaan, ke variabel.
ps: Saya pikir saya pertama kali belajar tentang trik penetapan variabel ini oleh @ gmazzap, untuk membuatnya lebih mudah untuk menghapus callback filter anonim.
Semoga ini bisa membantu!
sumber
WP_Query
untuk menargetkan contoh yang diberikan dan mengaksesnya melalui berbagai filter sepertiposts_where
,pre_get_posts
danposts_clauses
. Itulah yang kami lakukan dalam pendekatan # 2.Anda bisa menggunakan
use
kata kunci PHP . Jadi dengan bantuanuse
kata kunci ini Anda dapat membawa variabel di dalam suatu fungsi. Dan Anda juga dapat menulis fungsi anonim untuk mengurangi kode. Jadi semuanya akan menjadi-Semoga itu bisa membantu.
sumber
Mengapa tidak melewatkan nilai $ sebagai param?
dokumentasi
sumber