Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [inne][PHP]Includowanie między wtyczkami WordPress
Forum PHP.pl > Forum > Przedszkole
marcin909090
Witam. Posiadam jedną wtyczkę, która używa pliku "Funkcje_pobierajace_dane.php".
Chcę aby druga wtyczka używała tego samego pliku.

Na obrazku pierwszym widać strukturę katalogów:
1.

Rozpatrujemy wtyczki "apaczka_menu" oraz "apaczkaV2"

Na obrakzu drugim struktura katalogu "apaczkaV2".

2.

Na obrakzu trzecim struktura katalogu "apaczka_menu".

3.

Chcę includować do pliku "apaczkaV2.php" plik Funkcje_pobierajace_dane.php.
Więc w pliku "apaczkaV2.php" wpisuję:
  1. include_once('../apaczka_menu/Funkcje_pobierajace_dane.php');

Uruchamiam wtyczkę apaczkaV2.php i nie widzi w ogóle pliku. To jest nie logiczne, ponieważ plik tam istnieje. W czystym PHP to działa, w WordPressie nie działa.
Błąd standardowy :
  1. Warning: include_once(../apaczka_menu/Funkcje_pobierajace_dane.php): failed to open stream: No such file or directory /httpdocs/wordpress/wp-content/plugins/apaczkaV2/apaczkaV2.php on line 14
  2.  
  3. Warning: include_once(): Failed opening '../apaczka_menu/Funkcje_pobierajace_dane.php' for inclusion (include_path='.:') in httpdocs/wordpress/wp-content/plugins/apaczkaV2/apaczkaV2.php on line 14


Spotkał się ktoś z czymś takim ? Ścieżki są na 100% dobrze. Może jakieś prawa dostępu na serwerze (ale wszystko zmieniłem na 777 w filezilli). Wordpress nie potrafi importować nic poza plikami w katalogu z wtyczką ?
bobek358
Spróbuj ze ścieżką bezwzględna.

httpdocs/wordpress/wp-content/plugins/apaczka_menu/Funkcje_pobierajace_dane.php
freemp3
Niestety, ale ścieżki są na 100% źle. Na czystym php działa ponieważ wykonujesz plik apaczkaV2.php i względem niego ścieżka jest ok. W wordpressie natomiast wykonywany jest plik index.php znajdujący się w głównym katalogu, a reszta plików, w tym Twój apaczkaV2.php jest do niego dołączany. Dlatego też przy wywołaniu include ścieżka relatywna jest tworzona właśnie na podstawie pliku index.php.

Tak jak radzi bobek358 wykorzystaj ścieżkę absolutną.

Możesz wykorzystać funkcję plugin_dir_path, aby pobrać ściężkę do pluginu apaczkaV2 i na jej podstawie tworzyć ścieżki relatywne, aby przy ewentualnym przeniesieniu strony na inne środowisko nie było problemów.
marcin909090
Cytat(freemp3 @ 17.11.2015, 12:51:23 ) *
Niestety, ale ścieżki są na 100% źle. Na czystym php działa ponieważ wykonujesz plik apaczkaV2.php i względem niego ścieżka jest ok. W wordpressie natomiast wykonywany jest plik index.php znajdujący się w głównym katalogu, a reszta plików, w tym Twój apaczkaV2.php jest do niego dołączany. Dlatego też przy wywołaniu include ścieżka relatywna jest tworzona właśnie na podstawie pliku index.php.


To dlaczego np.
  1. include_once('Funkcje_pobierajace_dane.php');
lub
  1. include_once('folder/Funkcje_pobierajace_dane.php');


Takie include wykonują się bez błędów i działa wszystko.

Include do folderu nadrzędnego lub tego samego działa natomiast jeśli chce zejść niżej w drzewie katalogów to już nie działa. Dlacego tak ?

Ścieżka bezwzględna działa, ale to rozwiązanie odpada, bo będę stosował wtyczke na różnych instalacjach wordpress.

Czyli kombinować z plugin_dir_path ? Nie ma innych metod ?
freemp3
Faktycznie trochę to dziwne. Zrobiłem kilka testów na szybko i faktycznie jeśli odwołujesz się do pliku w tym samym katalogu lub podrzędnym (nie nadrzędnym wink.gif) to jest ok, ale jeśli próbowałem wyjść poziom wyżej i z powrotem do katalogu w którym są pliki to pojawia się błąd. Trzeba będzie sie temu bliżej przyjrzeć smile.gif

Wracając do tematu to użycie funkcji plugin_dir_path jest chyba najsensowniejszym rozwiązaniem. Niezależnie od instalacji wordpressa dostaniesz bezwzględną ścieżkę do katalogu, w którym znajduje się plugin.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.