PHP Wordpress 4.0.1 Pfad Problem

Hallo Leute,

versuche mir gerade das Programieren der Wordpress Plugins anhand eines realen Projektes beizubringen. Wurde so zusagen in das kalte Wasser geworfen.

Folgendes Problem:

Ich schreibe einen Plugin für den Adminbereich in Wordpress 4.0.1. Was der Plugin tun wird darf ich leider nicht sagen. In dem Plugin möchte ich den Bootstrap einbinden um das Aussehen etwas schicker zu machen. In Xampp klappt soweit alles, doch wenn ich auf den Testserver gehe dann findet der Plugin aufeinmal meine Styles nicht mehr obwohl die Ordnerstruktur beibehalten wird.

Habe folgende Ordnerstruktur:

Code:
Plugin-Name
|- /assets
   |- /css [ hier liegt die bootstrap.min.css ]
   |- /js [ hier liegt die bootstrap.min.js ]
   |- /img
|- /includes
|- file.php [ hier wird bootstrap eingebunden ]


Die Styles binde ich so ein:

PHP:
function in_admin_enqueue_scripts() {    
wp_enqueue_script   ( 'in-bootstrap-js',    plugins_url('/plugin-name/assets/js/bootstrap.min.js')); 
wp_enqueue_style    ( 'in-bootstrap-css',   plugins_url('/plugin-name/assets/css/bootstrap.min.css'));
wp_enqueue_script   ( 'in-bootstrap-js',    plugins_url('/plugin-name/assets/js/in_main.js'));         
wp_enqueue_style    ( 'in-main-css',        plugins_url('/plugin-name/assets/css/in_main.css'));        
}
add_action( 'admin_enqueue_scripts', 'in_admin_enqueue_scripts' );

wenn ich mir eine echo Ausgabe mache

PHP:
<?php echo plugins_url('/plugin-name/assets/css/bootstrap.min.css');?>

bekomme ich den RICHTIGEN Pfad zurück:
hxxp://wordpressinstallation.de/wp-content/plugins/plugin-name/assets/css/bootstrap.min.css

die Frage ist was mache ich falsch?
 
Zuletzt bearbeitet:
Nein, die Frage ist, was der Webserver dir antwortet, wenn du die generierte URL aufrufst.
 
Bei aufruf der Url bei

XAMPP:
zeigt mir die css Datei

TestServer
zeigt mir ebenfals die css Datei


Deswegen ja.. Der Pfad stimmt!
 
Zuletzt bearbeitet:
Liefert der Testserver auch den richtigen Content-Type für die Datei? Macht er evtl noch irgendwelche Redirects, bevor er die eigentliche Datei ausliefert?
 
Alles stimmt! Zuerst hatte ich die Vermutung das
PHP:
plugins_url
vielleicht falscher Parameter für sowas ist. Dem zufolge hatte ich dann einen relativen pfad genommen und zwar
Code:
../wp-content/plugins/pluginname/assets/css/bootstrap.min.css
da haben aber die beiden server (xampp und test) die css Datei nicht gefunden. Als nächstes habe ich dann mit
PHP:
wp_make_link_relative($link)
hat ebenfalls nicht geholfen und im wordpress worum hatte ich auch schon nachgefragt da hat nicht mal einer geantwortet.

Die beiden Umgebungen (XAMPP und TEST) sind 100% Identisch apache configs und so ..... obwohl der Testserver läuft unter DEBIAN auf VMWare
 
Zuletzt bearbeitet:
Seltsam ist es schon irgendwie, wenn die assemblierte URL im Browser aufrufbar ist, stimmt sie ja offenbar. Allerdings kannst du relative Pfade auch nicht einfach mittels '../' einbauen. Üblicherweise macht man das so:

Code:
$relpath = str_replace( WP_CONTENT_DIR, WP_CONTENT_URL, dirname( __FILE__ ) );
wp_enqueue_script( 'in-bootstrap-js', $relpath.'/assets/js/bootstrap.min.js');

Man holt sich also den Ordnernamen der aktuellen Datei und ersetzt in diesem den WP_CONTENT_DIR-Teil durch die URL.

Edit: Dass ein Debian-Webserver die gleichen Settings hat wie ein XAMPP wage ich aber mal zu bezweifeln so lange sich da niemand wirklich enorm Arbeit gemacht hat um den XAMPP aufzuräumen. Es kann also durchaus auch sein, dass openbasedir-Restriktionen oder ähnliches den Zugriff deines Plugins auf andere Dateien verhindern. Das kannst du aber ausprobieren indem du dir einfach mal ein kleines Test-Skript schreibst, das aus verschiedenen Ordner versucht Dateien zu lesen. Auch die Ausgabe von phpinfo() ist diesbezüglich manchmal sehr hilfreich.
 
Zurück
Oben