Mój problem polega na tym, że w głównym pliku wtyczki dołączam plik PHP podobny do tego:
include(WP_PLUGIN_URL . '/wordpress-group-buying/ipn/paypal-ipn.php');
// or
include_once(WP_PLUGIN_URL . '/wordpress-group-buying/ipn/paypal-ipn.php');
// or
require(WP_PLUGIN_URL . '/wordpress-group-buying/ipn/paypal-ipn.php');
// or
require_once(WP_PLUGIN_URL . '/wordpress-group-buying/ipn/paypal-ipn.php');
i w tym pliku mam wywołanie funkcji WordPress, takiej jak:
add_action('hook', 'callback');
i dostaję:
Błąd krytyczny: wywołanie niezdefiniowanej funkcji add activity ()
Zanim powiesz „użyj if(**function_exists**('add_action')){
”, jeśli go użyję, to po prostu nie działa.
Pytania:
- Jaki byłby właściwy sposób to zrobić?
- Jakie są różnice między
include
,include_once
,require
i kiedy mogę używać czarownicę?
plugin-development
functions
Bainternet
źródło
źródło
WP_PLUGIN_URL
w twoim kodzie powyżej :)Odpowiedzi:
Spóźniam się na tę imprezę, ale oto sposób „WordPress”: użyj
plugin_dir_path( __FILE__ )
, np .:Zauważ, że funkcja nie zwróci ukośnik tyłu za filePath.
źródło
__FILE__
go spowoduje wyjście w stosunku do bieżącego pliku, z którego go wywołujesz, więc jeśli twojainclude
instrukcja jest wykonana z podkatalogu wewnątrz struktury pliku wtyczki, również odzyskasz ten podkatalog.require_once(plugin_dir_path(__DIR__).'/myfile.inc');
Przejrzałem kilka wcześniej utworzonych wtyczek, aby zobaczyć różne sposoby, w jakie zawarłem dodatkowe pliki wewnątrz wtyczek i zauważyłem, że są dwie metody, których możesz użyć, prawdopodobnie jest ich więcej.
Zdefiniuj katalog wtyczek
Wewnątrz wtyczki masz następującą definicję, aby zdefiniować bieżącą lokalizację wtyczki.
Przykładowy kod:
Po prostu włącz lub wymagaj
Możesz po prostu użyć; włącz, include_once, wymagaj lub wymagaj_once w folderze wtyczki, odwołując się do lokalizacji jak w poniższym przykładowym kodzie. Poniższy przykład będzie oparty na pliku w katalogu głównym wtyczki, w tym innym pliku z folderu w folderze wtyczki.
Przykładowy kod:
źródło
W końcu rezygnuję z konstruktów WordPress dla obejmuje i używam:
Nie sądzę, żeby to faktycznie rozwiązało problem, który wydaje się być problemem zakresu, ale to jest kod, którego używam.
Jeśli chodzi o różnicę między włączeniem a wymaganiem:
włączenie spowoduje wyświetlenie ostrzeżenia, jeśli plik nie zostanie znaleziony.
Wymaganie spowoduje wygenerowanie błędu krytycznego, jeśli plik nie zostanie znaleziony
include_once i requ_once nie będą ponownie zawierać / wymagać pliku / kodu, jeśli został już uwzględniony / wymagany (zauważ, że o ile wiem, dotyczy to tylko określonego pliku w określonym katalogu).
źródło
Po pierwsze dziękuję wszystkim, którzy odpowiedzieli,
Moim problemem było wywołanie dołączonych plików z pełnym adresem URL w ten sposób, że nie przechodzą one przez WordPress. i tak się stało, ponieważ jak powiedziałem w pytaniu, dzwoniłem do nich z głównego pliku wtyczki. więc poprawka zakończyła się przy użyciu:
czytałem o pomocy WordPress . i jeszcze raz dziękuję za odpowiedź!
źródło
Powyższe informacje pochodzą z dokumentacji PHP, chodzi o to, że nie jest poprawna, będzie zależeć od potrzeby kodu, wymagam () od ważnych rzeczy, takich jak funkcje, ale od plików motywów, takich jak stopka lub pętla, których używam include_once lub include, ponieważ mogę obsłużyć ostrzeżenie i powiedzieć użytkownikowi / odwiedzającemu, że wystąpił błąd zamiast tylko fatal_error
źródło
Cześć @ בניית אתרים:
Podczas ładowania WordPress definiuje
add_action()
funkcję przed próbą załadowania jakichkolwiek wtyczek Fakt, że pojawia się błąd mówi mi, że robisz coś dziwnego lub że coś jest nie tak z instalacją WordPressa.Do kogo ładujesz swoją „wtyczkę” ? Czy używasz
include*()
lub,require*()
aby go załadować, może w swoimwp-config.php
pliku?źródło
lub
lub
Uwaga: do kolejkowania plików .css i .js
admin_enqueue_scripts
wewnątrz wtyczki należy użyćplugin_dir_url( __FILE__ )
źródło
Za każdym razem, gdy tworzysz nowy plik w katalogu roboczym, musisz go dołączać za każdym razem. Ale wypróbuj metodę przeskanowania twojego directroy i dołączenia go automatycznie, nie tylko plików php, co pomaga poprawnie dołączyć pliki php, js i css po obu stronach (backend, front end).
http://kvcodes.com/2014/05/wordpress-theme-development-include-files-automatically/
źródło