J'essaie d'obtenir la valeur d'entrée d'un shortcode dans une fonction qui est utilisée par un filtre, mais il ne semble pas y avoir de succès. Voici ce que j'ai fait:
function my_shortcode_function($atts){
$value = $atts['id'];
function filter_value(){
echo $value;
}
add_filter('posts_where','filter_value');
}
add_shortcode('my-shortcode','my_shortcode_function');
Maintenant, je sais que l'utilisation à l' $value
intérieur filter_value()
ne fonctionnera pas à cause des portées variables, mais même l'utilisation $GLOBALS['value']
ne fonctionne pas.
J'ai même essayé de l'utiliser $value = $atts['id']
à l'intérieur filter_value();
mais sans succès non plus.
Comment puis-je utiliser mon shortcode comme [my-shortcode id='123']
et passer la valeur 123 au filtre?
Merci.
$GLOBALS['value'] = some value
et appelle ensuite$GLOBALS['value']
cela fonctionne, mais si je définit directement la valeur en tant$value = some value
que puis l'appelle en utilisant$GLOBALS['value']
cela ne fonctionne pas, alors que cela devrait fonctionner selon le manuel PHP.$value
la portée globale avecglobal $value;
avant de l'initialiser avec une valeur. Par exempleglobal $value; $value = $a['id'];
, dans le filtre, vous pouvez le faireglobal $value; echo $value;
.$GLOBALS['value'];
?global
mot clé n'est nécessaire. Dans nos exemples, nous avons travaillé dans le cadre des fonctions, donc leglobal
mot-clé est nécessaire.Voici quelques solutions:
Approche n ° 1
Vous pouvez encapsuler la définition du shortcode et le
posts_where
rappel du filtre dans une classe pour pouvoir passer une valeur donnée entre les méthodes de classe, par exemple en tant que variable privée .Approche n ° 2
Une autre approche serait de passer la valeur en entrée
WP_Query
dans le rappel de votre shortcode:puis dans votre filtre posts_where, vous pouvez y accéder:
Approche n ° 3
... ou vous pouvez également ajuster l' exemple par @the_dramatist pour pouvoir supprimer le rappel par la suite en affectant la fonction anonyme à une variable:
Vérifiez par exemple les documents PHP sur la façon d'affecter une fonction anonyme, avec le mot-clé use, à une variable.
ps: Je pense que j'ai d'abord entendu parler de cette astuce d'assignation de variables par @gmazzap, pour faciliter la suppression du rappel d'un filtre anonyme.
J'espère que cela aide!
la source
WP_Query
pour cibler une instance donnée et y accéder via divers filtres commeposts_where
,pre_get_posts
etposts_clauses
. C'est ce que nous faisons dans l'approche # 2.Vous pouvez utiliser le
use
mot - clé de PHP . Donc, avec l'aide de ceuse
mot - clé, vous pouvez apporter une variable dans une fonction. Et vous pouvez également écrire une fonction anonyme pour réduire le code. Donc, le tout sera-J'espère que cela pourra aider.
la source
Pourquoi ne pas passer la valeur $ comme paramètre?
Documentation
la source