Wygląda na to, że $ post jest dostępny tylko dla haków wykonujących się w określonym czasie. Mam haczyk „init”, który musi pobrać niektóre dane z bazy danych za pomocą $ post-> ID.
Jak dotąd moim jedynym obejściem było dodanie kolejnego filtru do zawartości, który używa $ post do uzyskania potrzebnych informacji. Niestety, echo zwraca również wartość zwracaną na ekran i faktycznie nie powraca do funkcji, która pierwotnie wywołała filtr.
Oto kod, który wyodrębnia dane, których potrzebuję, ale wyświetla echo i nie zwraca wartości:
add_filter('the_content', 'get_keyword');
function get_keyword()
{
global $post;
$keyword = get_post_meta( $post->ID, '_wpg_def_keyword', true );
return $keyword;
}
Czy ktoś ma jakieś sugestie, jak zdobyć to, czego potrzebuję, i przekazać je z powrotem do funkcji wywoływania w celu późniejszego użycia we wtyczce?
EDYCJA: Aby to wyjaśnić, mam filtr działający przy init, który musi być w stanie pobrać informacje o bieżącym poście z DB. Aby to zrobić, wymaga dostępu do $ post-> ID. Ale nie jest to możliwe w ramach init, więc jak mogę uzyskać wynik, którego potrzebuję?
Dzięki,
Jonathan
ROZWIĄZANY:
Okazuje się, że odpowiedzią było po prostu użycie url_to_postid w następujący sposób:
$keyword = get_post_meta(
url_to_postid( "http://".$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI'] ),
'_wpg_def_keyword',
true
);
Działa idealnie nawet od init.
init
jest też za wcześnie,global $post;
aby być w zasięgu. może jeśli opisanie tego, co próbujesz osiągnąć, pomoże lepiej.Odpowiedzi:
Okazuje się, że odpowiedzią było po prostu użycie
url_to_postid
tego w następujący sposób:Działa idealnie nawet z
init
.źródło
Działa to również w WordPress 4.7:
źródło
Wystąpiły problemy z użyciem zaakceptowanej odpowiedzi, ponieważ nie działa ona z portami i portami wielostanowiskowymi . Oto rozwiązanie, które powinno działać w każdym przypadku:
źródło