Tampaknya $ post hanya tersedia untuk kait yang dieksekusi pada waktu-waktu tertentu. Saya memiliki hook "init" yang perlu menarik beberapa data dari database menggunakan $ post-> ID.
Sejauh ini satu-satunya solusi saya adalah menambahkan filter pada the_content, yang menggunakan $ post untuk mendapatkan informasi yang saya butuhkan. Sayangnya, ini juga menggemakan nilai kembali ke layar, dan gagal mengembalikannya ke fungsi yang awalnya disebut filter.
Berikut adalah kode yang mengekstrak data yang saya butuhkan, tetapi menggemakan dan gagal mengembalikan nilainya:
add_filter('the_content', 'get_keyword');
function get_keyword()
{
global $post;
$keyword = get_post_meta( $post->ID, '_wpg_def_keyword', true );
return $keyword;
}
Adakah yang punya saran tentang cara mendapatkan apa yang saya butuhkan dan mengembalikannya ke fungsi panggilan untuk digunakan nanti dalam plugin?
EDIT: Agar lebih jelas, saya memiliki filter yang berjalan di init, yang harus dapat mengambil informasi tentang posting saat ini dari DB. Untuk melakukan ini, diperlukan akses ke $ post-> ID. Tetapi itu tidak mungkin dalam init, jadi bagaimana saya bisa mendapatkan hasil yang saya butuhkan?
Terima kasih,
Jonathan
TERPECAHKAN:
Ternyata jawabannya hanya menggunakan url_to_postid seperti ini:
$keyword = get_post_meta(
url_to_postid( "http://".$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI'] ),
'_wpg_def_keyword',
true
);
Bekerja dengan sempurna bahkan dari init.
init
terlalu dini untukglobal $post;
berada dalam ruang lingkup. mungkin jika Anda menggambarkan apa yang Anda coba capai akan membantu lebih baik.Jawaban:
Ternyata jawabannya hanya menggunakan
url_to_postid
seperti ini:Bekerja dengan sempurna bahkan dari
init
.sumber
Ini juga berfungsi di WordPress 4.7:
sumber
Punya masalah menggunakan jawaban yang diterima karena tidak bekerja dengan port dan port multisite . Berikut adalah solusi yang harus bekerja dalam setiap kasus:
sumber