Estoy tratando de obtener el valor de entrada de un shortcode dentro de una función utilizada por un filtro, pero parece que no hay éxito. Aquí esta lo que hice:
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');
Ahora sé que usar el $value
interior filter_value()
no funcionará debido a los ámbitos variables, pero incluso el uso $GLOBALS['value']
no funciona.
Incluso intenté usarlo $value = $atts['id']
dentro filter_value();
pero tampoco tuve éxito.
¿Cómo puedo usar mi shortcode como [my-shortcode id='123']
y pasar el valor 123 al filtro?
Gracias.
$GLOBALS['value'] = some value
y luego lo llamo$GLOBALS['value']
, funciona, pero si configuro el valor directamente como$value = some value
y luego lo llamo usando$GLOBALS['value']
, no funciona, aunque debería funcionar de acuerdo con el manual de PHP.$value
el ámbito global conglobal $value;
antes de inicializarlo con un valor. Por ejemplo,global $value; $value = $a['id'];
en el filtro puedes hacerglobal $value; echo $value;
¿Eso ayuda?$GLOBALS['value'];
?global
se necesita una palabra clave. En nuestros ejemplos, hemos estado trabajando desde el alcance de las funciones, por lo que laglobal
palabra clave es necesaria.Aquí hay algunas soluciones:
Enfoque n. ° 1
Puede ajustar la definición del shortcode y la
posts_where
devolución de llamada del filtro en una clase para poder pasar un valor dado entre los métodos de la clase, por ejemplo, como una variable privada .Enfoque n. ° 2
Otro enfoque sería pasar el valor como entrada
WP_Query
dentro de la devolución de llamada de su shortcode:y luego dentro del filtro posts_where puedes acceder a él:
Enfoque n. ° 3
... o también puede ajustar el ejemplo de @the_dramatist para poder eliminar la devolución de llamada luego asignando la función anónima a una variable:
Compruebe, por ejemplo, los documentos PHP sobre cómo asignar una función anónima, con la palabra clave use, a una variable.
ps: creo que aprendí por primera vez sobre este truco de asignación de variables de @gmazzap, para que sea más fácil eliminar la devolución de llamada de un filtro anónimo.
¡Espero eso ayude!
fuente
WP_Query
apuntar a una instancia determinada y acceder a ella a través de varios filtros comoposts_where
,pre_get_posts
yposts_clauses
. Eso es lo que hacemos en el enfoque # 2.Puede usar la
use
palabra clave de PHP . Entonces, con la ayuda de estause
palabra clave, puede traer variables dentro de una función. Y también puede escribir una función anónima para reducir el código. Entonces todo será-Espero que ayude.
fuente
¿Por qué no pasar el valor de $ como parámetro?
documentación
fuente