Auch untrailingslashit()
und trailingslashit()
sind eher weniger bekannt. Beide Funktionen machen etwas total simples, was aber immer wieder benötigt wird.
<?php
function untrailingslashit( $string ) {
...
}
?>
<?php
function trailingslashit( $string ) {
...
}
?>
Es gilt jeweils:
- $string (string)
Eine URL an die ein Slash angehängt oder entfernt werden soll.
Zurückgegeben wird der Eingabe-String mit oder ohne endenden Slash (/
).
Beispiel:
Die WordPress Funktion rest_url()
gibt in der Regel die URL zur REST-API ohne endenden Slash aus. In einem meiner Plugins schrieb ich den Wert mittels wp_add_inline_script()
in eine Variable. Der Output sah dann ungefähr so aus:
var MM_OPTIONS = { "rest_url": "https://example.com/wp-json" };
Mittels jQuery konnte ich dann darauf zugreifen und einen AJAX-Request absetzen:
jQuery.ajax( {
'url': MM_OPTIONS.rest_url + '/path/to/route'
} );
Irgendwann meldete sich ein Kunde bei mir, dass es ihm nicht möglich sei, mein Plugin vollständig zu nutzen. Es stellte sich heraus, dass ein Dritthersteller-Plugin den rest_url
-Filter nutzte und die Funktion trailingslashit()
darauf anwendete.
Das Resultat war, dass meine JavaScript-Dateien nicht mehr funktionierten, da diese eine Anfrage an
https://example.com/wp-json//path/to/route
stellten (mit doppeltem Slash). Manchmal werden solche doppelten Slashes auch von Webservern gefiltert. Das passierte in diesem Fall allerdings auch nicht. Dadurch Schlug jeder Aufruf an jeden REST-API Endpunkt fehl.
Die Lösung war, die untrailingslashit()
-Funktion darauf anzuwenden:
<?php
$vars = [
'rest_url' => untrailingslashit( rest_url() )
];
wp_add_inline_script(
'wpb-rs-admin-posts',
"var MM_OPTIONS = " . json_encode( $vars ) . ";",
'before'
);
?>