Próbuję uzyskać wartość wejściową shortcode wewnątrz funkcji, która jest używana przez filtr, ale wydaje się, że nie ma sukcesu. Oto co zrobiłem:
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');
Teraz wiem, że używanie $value
wewnątrz filter_value()
nie będzie działać z powodu zmiennych zakresów, ale nawet używanie $GLOBALS['value']
nie działa.
Próbowałem nawet użyć w $value = $atts['id']
środku, filter_value();
ale też bez powodzenia.
Jak mogę użyć mojego krótkiego kodu [my-shortcode id='123']
i przekazać wartość 123 do filtra?
Dzięki.
$GLOBALS['value'] = some value
a następnie wywołam,$GLOBALS['value']
to zadziała, ale jeśli ustawię wartość bezpośrednio jako,$value = some value
a następnie wywołanie przy użyciu$GLOBALS['value']
nie zadziała, podczas gdy powinno działać zgodnie z instrukcją PHP.$value
zakres globalnyglobal $value;
. Np.global $value; $value = $a['id'];
W filtrze możesz to zrobićglobal $value; echo $value;
Czy to pomaga?$GLOBALS['value'];
?global
słowo kluczowe nie jest potrzebne. W naszych przykładach pracowaliśmy z zakresu funkcji, więcglobal
słowo kluczowe jest konieczne.Oto kilka obejść:
Podejście nr 1
Można zawinąć definicję skrótu i
posts_where
wywołanie zwrotne filtra w klasę, aby móc przekazywać określoną wartość między metodami klasowymi, np. Jako zmienną prywatną .Podejście nr 2
Innym podejściem byłoby przekazanie wartości jako danych wejściowych do
WP_Query
wywołania zwrotnego kodu krótkiego:a następnie w filtrze post_where możesz uzyskać do niego dostęp:
Podejście nr 3
... lub możesz także dostosować przykład przez @tam_dramatist, aby móc później usunąć wywołanie zwrotne, przypisując funkcję anonimową do zmiennej:
Sprawdź np. Dokumentację PHP, w jaki sposób przypisać anonimową funkcję za pomocą słowa kluczowego use do zmiennej.
ps: Myślę, że po raz pierwszy dowiedziałem się o tej sztuczce przypisywania zmiennych przez @gmazzap, aby ułatwić usunięcie wywołania zwrotnego anonimowego filtra.
Mam nadzieję, że to pomoże!
źródło
WP_Query
kierowania danej instancji i do niego dostęp za pomocą różnych filtrów, takich jakposts_where
,pre_get_posts
iposts_clauses
. To właśnie robimy w podejściu nr 2.Możesz użyć
use
słowa kluczowego PHP . Tak więc za pomocą tegouse
słowa kluczowego można wprowadzić zmienną do funkcji. A także możesz napisać anonimową funkcję, aby zmniejszyć kod. Więc cała sprawa będzie-Mam nadzieję, że to pomaga.
źródło
Dlaczego nie przekazać wartości $ jako parametru?
dokumentacja
źródło