Cum să obții $post în filtrul sau acțiunea init?
Se pare că variabila $post este disponibilă doar pentru anumite hook-uri care rulează la momente specifice. Am un hook "init" care trebuie să extragă niște date din baza de date folosind $post->ID.
Până acum, singura soluție a fost să adaug un alt filtru pe the_content, care folosește $post pentru a obține informațiile necesare. Din păcate, acesta afișează valoarea returnată pe ecran și nu o returnează efectiv funcției care a apelat filtrul inițial.
Iată codul care extrage datele de care am nevoie, dar le afișează și nu returnează valoarea:
add_filter('the_content', 'get_keyword');
function get_keyword()
{
global $post;
$keyword = get_post_meta( $post->ID, '_wpg_def_keyword', true );
return $keyword;
}
Are cineva sugestii despre cum să obțin ceea ce am nevoie și să o transmit înapoi funcției apelante pentru utilizare ulterioară în plugin?
EDIT: Pentru a clarifica, am un filtru care rulează la init, care trebuie să poată prelua informații despre postarea curentă din baza de date. Pentru asta, are nevoie de acces la $post->ID. Dar acest lucru nu este posibil în interiorul init, deci cum pot obține rezultatul dorit?
Mulțumesc, Jonathan
REZOLVAT:
Se pare că soluția a fost să folosesc url_to_postid astfel:
$keyword = get_post_meta(
url_to_postid( "http://".$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI'] ),
'_wpg_def_keyword',
true
);
Funcționează perfect chiar și din init.

Se pare că răspunsul a fost pur și simplu să folosim url_to_postid
astfel:
$keyword = get_post_meta( url_to_postid( "http://".$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI'] ), '_wpg_def_keyword', true );
Funcționează perfect chiar și din init
.

Am avut probleme folosind răspunsul acceptat deoarece nu funcționează cu porturi și porturi multisite. Iată o soluție care ar trebui să funcționeze în orice situație:
/**
* Notă: Această funcție va funcționa doar pe postări/pagini/tipuri de postări SINGULARE
*/
function get_early_postid() {
return url_to_postid((isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on' ? "https" : "http") . "://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]");
}
// demonstrație
add_action('init','my_super_early_meta_action');
function my_super_early_meta_action() {
$keyword = get_post_meta( get_early_postid(), '_wpg_def_keyword', true );
}
