Il semble que $ post ne soit disponible que pour les hooks exécutés à certains moments. J'ai un hook "init" qui doit extraire certaines données de la base de données en utilisant l'ID $ post->.
Jusqu'à présent, ma seule solution de contournement a été d'ajouter un autre filtre sur le_contenu, qui utilise $ post pour obtenir les informations dont j'ai besoin. Malheureusement, il renvoie également la valeur de retour à l'écran et ne parvient pas à la renvoyer à la fonction qui a appelé le filtre à l'origine.
Voici le code qui extrait les données dont j'ai besoin, mais qui fait écho et ne renvoie pas la valeur:
add_filter('the_content', 'get_keyword');
function get_keyword()
{
global $post;
$keyword = get_post_meta( $post->ID, '_wpg_def_keyword', true );
return $keyword;
}
Quelqu'un at-il une suggestion sur la façon d'obtenir ce dont j'ai besoin et de le faire revenir à la fonction d'appel pour une utilisation ultérieure dans le plugin?
EDIT: Pour éventuellement rendre cela plus clair, j'ai un filtre en cours d'exécution à init, qui doit être en mesure de récupérer des informations sur le message actuel de la base de données. Pour ce faire, il nécessite l'accès à $ post-> ID. Mais ce n'est pas possible dans init, alors comment puis-je obtenir le résultat dont j'ai besoin?
Merci,
Jonathan
RESOLU:
Il s'avère que la réponse était simplement d'utiliser url_to_postid comme ceci:
$keyword = get_post_meta(
url_to_postid( "http://".$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI'] ),
'_wpg_def_keyword',
true
);
Fonctionne parfaitement même depuis l'init.
init
est également trop tôt pourglobal $post;
être dans le champ d'application. peut-être que si vous décrivez ce que vous essayez d'accomplir vous aidera mieux.Réponses:
Il s'avère que la réponse était simplement d'utiliser
url_to_postid
comme ceci:Fonctionne parfaitement même à partir de
init
.la source
Cela fonctionne également dans WordPress 4.7:
la source
A rencontré des problèmes lors de l'utilisation de la réponse acceptée car elle ne fonctionne pas avec les ports et les ports multisites . Voici une solution qui devrait fonctionner dans tous les cas:
la source