Tworzę wtyczkę Wordpress Woocommerce. W moim lokalnym środowisku działa dobrze, ale mam problemy z dodaniem wtyczki do repliki środowiska prod. Jestem nowym użytkownikiem wordpress i nie znam się na web dev (jestem programistą Java).
W pliku wtyczki tworzę instancję klasy z pakietu wtyczek Woocommerce w następujący sposób:
$coupon = new WC_Coupon($some_code);
W środowisku lokalnym (php 5.4.10, Woocommerce 2.0.13, Wordpress 3.6) jest w porządku. W środowisku produkcyjnym (php 5.4.10, Woocommerce 1.6.5.2, Wordpress 3.4.2) mam następujący błąd:
Fatal error: Class 'WC_Coupon' not found
Próbowałem dołączyć plik, w którym zdefiniowano klasę WC_Coupon, ale wtedy pojawia się błąd
Fatal error: Cannot redeclare class WC_Coupon
Jaki jest właściwy sposób używania klas zadeklarowanych w innej wtyczce?
Uwaga: aktualizacja nie jest obecnie opcją.
plugins_loaded
jest odpowiedni hak. Trzeba będzie sprawdzić, kiedy dokładnie ta klasa jest dostępna, i po niej podłączyć . W każdym razie +1register_deactivation_hook( __FILE__, 'deactivate');
. Więc nie mogę się doczekać. Czy mogę poprosić wordpress o załadowanie klasy, jeśli jeszcze nie jest załadowana?WC_Coupon
Jest ładowany przez__construct
głównegoWooCommerce
klasy (naprawdę przezincludes()
metody bezpośrednio wzywano__construct
) iWooCommerce
klasy jest instanziate (jako pojedyncza) tak szybko, jak wtyczka jest załadowany. Takplugins_loaded
jest w tym przypadku właściwy hak;)class_exists( 'WC_Coupon' )
. Proszę również powiedzieć, że używasz tego podczas dezaktywacji ... mógł zaoszczędzić mnóstwo czasu na odpowiadanie tłumowi ...Jest już za późno, ale chciałbym podzielić się tym, jak korzystać z woocommerce i jego klas bez znalezienia klasy błędu.
Najpierw sprawdź, czy woocommerce jest zainstalowany i użyj
woocommerce_loaded
haka akcji.Mam nadzieję, że to komuś pomoże.
źródło
Właściwy sposób to:
Lepiej sprawdzić, czy klasa istnieje przed jej użyciem, pozwala uniknąć błędu krytycznego, jeśli wtyczka jest wyłączona.
Nie można zmienić klasy, co nie jest dozwolone w PHP.
Możesz także przedłużyć klasę:
Ale przez większość czasu, w tym przypadku z WooCommerce, lepiej znaleźć hak w dokumentacji , która poradzi sobie z zadaniem.
źródło