Uważam, że muszę przekazać niestandardowe dane do filtra udostępnianego przez wtyczkę innej firmy. Wszystkie sposoby, które widziałem, aby to zrobić, są naprawdę skomplikowane i trudne do obejrzenia.
Weź ten przykład:
$score = 42; //Some crazy calculation I don't want to repeat.
function add_score_to_title($title) {
return 'Quiz Results (' . $score . '/') - ' . $title;
}
add_filter( 'aioseop_title_single', 'add_score_to_title');
Jak mogę przekazać $score
zmienną add_score_to_title()
?
Skończyło się na dodaniu mojej zmiennej do $wp
obiektu globalnego . Tak więc kończy się to:
global $wp;
$score = 42; //Some crazy calculation I don't want to repeat.
$wp->some_random_name_for_score = $score;
function add_score_to_title($title) {
global $wp;
$score = $wp->some_random_name_for_score;
return 'Quiz Results (' . $score . '/') - ' . $title;
}
add_filter( 'aioseop_title_single', 'add_score_to_title');
Brudny? Może. Prosty? Tak! Jakieś wady tej techniki? Proszę omówić
AKTUALIZACJA Oto pełny kod, o którym mowa -> http://pastebin.com/fkSXY04m
$score
jest obliczany przez zapętlanie tablicy rzeczy i zwiększanie zmiennej. pastebin.com/fkSXY04mOdpowiedzi:
Masz co najmniej dwie opcje:
Globalizuj zmienną
Zwiń obliczenia wyniku
Jeśli tylko kiedykolwiek potrzeba obliczania punktacji wewnątrz filtra, wyciągnij logikę do samego zwrotnego:
Co więcej, możesz zawrzeć swoje obliczenia wyniku we własnej funkcji, a następnie wywołać tę funkcję w swoim wywołaniu zwrotnym:
Jeśli okaże się, że masz problemy z odniesieniem do
$_POST
obiektu, możesz również zarejestrować zmienną zapytania, a następnie użyć jejget_query_var()
wewnętrznie, aby uzyskać dane:Dzięki temu
$_POST['Q']
można go zastąpićget_query_var('Q')
.źródło
$score
Najpierw obliczyłem, a potem zglobalizowałem. Nic dziwnego, że to nie działało. Dziękuję Ci!Wywołaj funkcję w dowolnym miejscu skryptu, aby uzyskać wynik, zostanie on obliczony tylko raz.
Innym sposobem jest użycie anonimowych funkcji :
źródło
add_filter()
aniadd_action()
wywoływać. Nie można ich usunąć za pośrednictwemremove_function()
.remove_filter()
iremove_action()
. I nie ma powodu, dla którego filtry wtyczek / motywów nie powinny być w sposób rozsądny możliwe do usunięcia: przesłonić kolejkowanie arkuszy stylów wtyczek, motywy podrzędne itp.Poniższy przykład pokazuje zmienną
$my_calculation
w zakresie globalnym, jednak z naszej funkcji lokalnej musimy zadeklarowaćglobal $my_calculation
, aby uzyskać dostęp do zmiennej w zakresie globalnym.To tylko jeden ze sposobów, aby się tym zająć i wydaje się być fajny. Czy to by Ci pasowało?
źródło
print
lubecho
Twój wynik, aby upewnić się, że twoja funkcja rzeczywiście działa przed przekazaniem jej do filtra?$score
rzeczywiście działa. Wygłupiłem się i ustawiłem$score
najpierw, a potem zglobalizowałem, co najwyraźniej nie działa. Zrób to we właściwy sposób,$score
najpierw globalizując, a następnie nadając mu wartość, zgodnie z oczekiwaniami. Dziękuje wszystkim.