Có vẻ như $ post chỉ có sẵn để hook thực thi tại một số thời điểm nhất định. Tôi có một hook "init" cần lấy một số dữ liệu từ cơ sở dữ liệu bằng cách sử dụng $ post-> ID.
Cho đến nay, cách giải quyết duy nhất của tôi là thêm một bộ lọc khác trên the_content, sử dụng $ post để lấy thông tin tôi cần. Thật không may, nó cũng lặp lại giá trị trả về cho màn hình và không thực sự trả nó về chức năng được gọi là bộ lọc ban đầu.
Đây là đoạn mã trích xuất dữ liệu tôi cần, nhưng lặp lại và không trả về giá trị:
add_filter('the_content', 'get_keyword');
function get_keyword()
{
global $post;
$keyword = get_post_meta( $post->ID, '_wpg_def_keyword', true );
return $keyword;
}
Có ai có bất kỳ đề nghị nào về cách có được những gì tôi cần và đưa nó trở lại chức năng gọi điện để sử dụng sau này trong plugin không?
EDIT: Để có thể làm cho điều này rõ ràng hơn, tôi có một bộ lọc đang chạy ở init, cần phải có thể truy xuất thông tin trên bài đăng hiện tại từ DB. Để làm điều này, nó yêu cầu quyền truy cập vào $ post-> ID. Nhưng điều đó là không thể trong init, vậy làm thế nào tôi có thể nhận được kết quả tôi cần?
Cảm ơn,
Jonathan
GIẢI QUYẾT:
Hóa ra câu trả lời chỉ đơn giản là sử dụng url_to_postid như thế này:
$keyword = get_post_meta(
url_to_postid( "http://".$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI'] ),
'_wpg_def_keyword',
true
);
Hoạt động hoàn hảo ngay cả từ init.
init
là quá sớmglobal $post;
để nằm trong phạm vi. có lẽ nếu bạn mô tả những gì bạn đang cố gắng thực hiện sẽ giúp tốt hơn.