Da mir so etwas wie was formateins schrieb ab und an keine Ruhe lässt, habe ich gestern noch bis des Nachts gegen 03.00 Uhr gesucht und getestet, bin aber erst heute fertig geworden. Getestet wurde die Übergabe von Links sowohl mit als auch ohne QueryString mit Links nach folgendem Muster, wobei beide Schreibweisen nun funktionieren:
<a href="http://www.example.net/zwischenseite/?zielurl=www.example.com/irgend-etwas.html">Link mit ?</a>
<a href="http://www.example.net/zwischenseite/?zielurl=www.example.com/">Link mit ?</a>
<a href="http://www.example.net/zwischenseite/www.example.com/irgend-etwas.html">Link ohne ?</a>
<a href="http://www.example.net/zwischenseite/www.example.com/">Link ohne ?</a>
Als problematisch erwies es sich für die Rewrite-Regeln, wenn im Wert ein / Schrägstrich enthalten ist. In diesen Fällen finde ich es bisher einfacher, den zu Wert zu splitten und auf zwei Parameter aufzuteilen.
Auf eine Überprüfung mit in_array würde ich nicht verzichten, da sonst jeder beinahe jeden beliebigen Link übergeben kann. Nur dass jetzt beide Schreibweisen im Array notiert werden müssen, also mit und ohne abschließenden Slash, finde ich noch nicht berauschend. Werde da noch einmal gelegentlich schauen, ob sich das besser regeln lässt.
Bei der Übergabe ohne sichtbaren QueryString werden die Werte bereits durch die Rewrite-Regeln auf erlaubte Zeichen gefiltert. Wie es sich bei der Übergabe mit ?QueryString verhält, habe ich noch nicht richtig getestet. Bin eigentlich dafür, dass alles rausfliegt, was da nicht hineingehört, somit lasse ich die RegEx mit preg_replace erst einmal drinne, zumindest bis ich es vielleicht irgendwann einmal besser wissen sollte.
Mit index.php?name=zwischenseite bin ich mir ebenfalls nicht sicher, bei mir funktioniert es nur so, doch das könnte wohl von den Einstellungen abhängig sein, ob statt name ein anderer Parameter gewählt werden müsste.
<?php
/*----------------------------------------------------------------------------
Plugin Name: Linkausgabe auf Zwischenseite
Description: Einfuegen in Zwischenseite mit dem Short-Tag [nur_fuer_linkausgabe]
Author: Horst Müller - Stendal
Version: Beta 1.00
-----------------------------------------------------------------------------
*/
add_action("init", "schreibe_eigene_rewrite_Regeln");
add_filter("query_vars", "parameter_fuer_url_Uebergabe");
add_shortcode("nur_fuer_linkausgabe", "nur_fuer_uebergabe_von_Links");
function parameter_fuer_url_Uebergabe($query_vars) {
$query_vars[] = "zielhost";
$query_vars[] = "zielpfad";
$query_vars[] = "zielurl";
return $query_vars;
}
function nur_fuer_uebergabe_von_Links($atts) {
global $wp_query;
$webadressen = array (
"www.example.com/irgend-etwas.html",
"www.example.com/etwas-anderes.html",
"www.example.com/",
"www.example.com"
);
function pruefe_und_bilde_Links($data) {
$data = preg_replace("/[^a-zA-Z0-9.\/_-]/", "", $data);
$data = "<a href=\"http://".
esc_attr($data)."\">".
esc_attr($data)."</a>";
return $data;
}
if (isset($wp_query->query_vars["zielhost"])) {
$zielhost = $wp_query->query_vars["zielhost"];
if (isset($wp_query->query_vars["zielpfad"])) {
$zielpfad = $wp_query->query_vars["zielpfad"];
$zielurl = $zielhost."/".$zielpfad;
}
else {
$zielurl = $zielhost;
}
if (in_array($zielurl, $webadressen)) {
return pruefe_und_bilde_Links($zielurl);
}
}
elseif (isset($wp_query->query_vars["zielurl"])) {
$zielurl = $wp_query->query_vars["zielurl"];
if (in_array($zielurl, $webadressen)) {
return pruefe_und_bilde_Links($zielurl);
}
}
else {
return "Es wurde nichts übergeben!\n";
}
}
function schreibe_eigene_rewrite_Regeln() {
global $wp_rewrite;
add_rewrite_rule(
'^zwischenseite/([a-zA-Z0-9._-]+?)/?$',
'index.php?name=zwischenseite&zielhost=$matches[1]',
'top'
);
add_rewrite_rule(
'^zwischenseite/([a-zA-Z0-9._-]+?)/([a-zA-Z0-9._-]*?)/?$',
'index.php?name=zwischenseite&zielhost=$matches[1]&zielpfad=$matches[2]',
'top'
);
$wp_rewrite->flush_rules(); // Nur fuer Baustellenbetrieb
}
?>
Alles anzeigen