Saya menemukan diri saya perlu meneruskan data khusus ke filter yang disediakan oleh plugin pihak ke-3. Semua cara yang kulihat untuk melakukan ini benar-benar rumit dan sulit untuk membungkus kepalaku.
Ambil contoh ini:
$score = 42; //Some crazy calculation I don't want to repeat.
function add_score_to_title($title) {
return 'Quiz Results (' . $score . '/') - ' . $title;
}
add_filter( 'aioseop_title_single', 'add_score_to_title');
Bagaimana saya bisa meneruskan $score
variabel ke add_score_to_title()
?
Apa yang akhirnya saya lakukan adalah menambahkan variabel saya ke $wp
objek global . Jadi Anda berakhir dengan ini:
global $wp;
$score = 42; //Some crazy calculation I don't want to repeat.
$wp->some_random_name_for_score = $score;
function add_score_to_title($title) {
global $wp;
$score = $wp->some_random_name_for_score;
return 'Quiz Results (' . $score . '/') - ' . $title;
}
add_filter( 'aioseop_title_single', 'add_score_to_title');
Kotor? Mungkin. Sederhana? Ya! Adakah kelemahan teknik ini? Tolong diskusikan.
PEMBARUAN Berikut adalah kode lengkap yang dimaksud -> http://pastebin.com/fkSXY04m
$score
dihitung dengan mengulangi berbagai hal dan menambah variabel. pastebin.com/fkSXY04mJawaban:
Anda memiliki setidaknya dua opsi:
Globalisasi Variabelnya
Bungkus Perhitungan Skor
Jika Anda hanya membutuhkan perhitungan skor di dalam filter, tarik logika ke dalam callback itu sendiri:
Lebih baik lagi, Anda bisa membungkus perhitungan skor Anda dalam fungsi sendiri, dan kemudian memanggil fungsi itu di dalam panggilan balik Anda:
Jika Anda menemukan masalah dalam referensi
$_POST
objek, Anda juga dapat mendaftarkan variabel kueri Anda dan kemudian menggunakan secaraget_query_var()
internal untuk mendapatkan data:Dengan ini di tempat,
$_POST['Q']
bisa diganti denganget_query_var('Q')
.sumber
$score
dulu dan kemudian mengglobalkannya. Tidak heran itu tidak berhasil. Terima kasih!Panggil fungsi di mana saja dalam skrip Anda untuk mendapatkan skor, itu hanya akan dihitung sekali.
Cara lain, menggunakan fungsi anonim :
sumber
add_filter()
atauadd_action()
dipanggil. Mereka tidak dapat dihapus melaluiremove_function()
.remove_filter()
danremove_action()
. Dan tidak ada alasan filter Plugin / Tema tidak dapat dihilangkan secara wajar: timpa enqueues Plugin, Tema Anak, dll.Contoh berikut melihat variabel
$my_calculation
dalam lingkup global, namun dari dalam fungsi lokal kami, kami perlu mendeklarasikanglobal $my_calculation
untuk mengakses variabel dalam lingkup global.Ini hanya salah satu cara untuk melakukannya dan tampaknya rapi. Apakah ini akan berhasil untuk Anda?
sumber
print
atauecho
hasil Anda untuk memastikan bahwa fungsi Anda memang berfungsi sebelum meneruskannya ke filter?$score
memang berhasil. Saya melakukan kesalahan dan menetapkan$score
pertama kemudian mengglobal yang jelas tidak berhasil. Melakukannya dengan cara yang benar dengan mengglobalisasi$score
terlebih dahulu kemudian memberikannya nilai berhasil seperti yang diharapkan. Terima kasih semuanya.