Es scheint, dass $ post nur für Hooks verfügbar ist, die zu bestimmten Zeiten ausgeführt werden. Ich habe einen "init" -Hook, der einige Daten mit der $ post-> ID aus der Datenbank abrufen muss.
Bisher bestand meine einzige Problemumgehung darin, einen weiteren Filter für den Inhalt hinzuzufügen, der $ post verwendet, um die benötigten Informationen abzurufen. Leider wird auch der Rückgabewert auf dem Bildschirm wiedergegeben und nicht an die Funktion zurückgegeben, die den Filter ursprünglich aufgerufen hat.
Hier ist der Code, der die von mir benötigten Daten extrahiert, den Wert jedoch wiedergibt und nicht zurückgibt:
add_filter('the_content', 'get_keyword');
function get_keyword()
{
global $post;
$keyword = get_post_meta( $post->ID, '_wpg_def_keyword', true );
return $keyword;
}
Hat jemand einen Vorschlag, wie ich das bekommen kann, was ich brauche, und es zur späteren Verwendung im Plugin an die aufrufende Funktion zurückgeben lassen?
BEARBEITEN: Um dies möglicherweise klarer zu machen, wird bei init ein Filter ausgeführt, der in der Lage sein muss, Informationen zum aktuellen Beitrag aus der Datenbank abzurufen. Dazu ist Zugriff auf $ post-> ID erforderlich. In init ist dies jedoch nicht möglich. Wie kann ich das gewünschte Ergebnis erzielen?
Vielen Dank,
Jonathan
Gelöst:
Es stellte sich heraus, dass die Antwort einfach darin bestand, url_to_postid wie folgt zu verwenden:
$keyword = get_post_meta(
url_to_postid( "http://".$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI'] ),
'_wpg_def_keyword',
true
);
Funktioniert auch von init perfekt.
init
zu frühglobal $post;
, um im Geltungsbereich zu sein. Vielleicht hilft es besser, wenn Sie beschreiben, was Sie erreichen wollen.Antworten:
Es stellte sich heraus, dass die Antwort einfach
url_to_postid
so war:Funktioniert auch ab perfekt
init
.quelle
Dies funktioniert auch in WordPress 4.7:
quelle
Hatte Probleme bei der Verwendung der akzeptierten Antwort, da diese nicht mit Ports und Multisite-Ports funktioniert . Hier ist eine Lösung, die in jedem Fall funktionieren sollte:
quelle