Nowy dzień, nowe problemy. Jeden z klientów pomimo faktu, że miał w podpowiedzi instrukcję, że powinien uzupełnić linki używając pełnej deklaracji czyli zaczynając od http:// lub https://, postanowił stanowczo ją zignorować. Powstał w ten sposób problem przy wyświetlaniu linków na stronie. Jedne działały a drugie nie. Co gorsza nie było reguły, który z nich ma http a który nie. Ręczna edycja linków na poprawne nie wchodziła w grę. Trzeba było coś dopisać. Dla potomności zostawiam zatem skrypt na blogu:
function add_http($url) {
if (!preg_match("~^(?:f|ht)tps?://~i", $url)) {
$url = "http://" . $url;
}
return $url;
}
A w js mamy taką przydatną funkcję, gdyby obróbka zmiennej w php była zbyt czasochłonna.
function formatUrl(url)
{
var httpString = "http://";
var httpsString = "https://";
if (url.substr(0, httpString.length).toLowerCase() !== httpString && url.substr(0, httpsString.length).toLowerCase() !== httpsString)
url = httpString + url;
return url;
}
Przy okazji załatwiliśmy jeszcze jedną rzecz aby klient nie musiał osobno podawać anhor tekstu a był pobierany z linka z jednoczesnym usunięciem http lub https
function remove_http($url) {
$disallowed = array('http://', 'https://');
foreach($disallowed as $d) {
if(strpos($url, $d) === 0) {
return str_replace($d, '', $url);
}
}
return $url;
}
A finalnie w kodzie wygląda to tak:
<?php if($website_address = get_field('company__website')) : ?>
<li class="web--list">
<?php
if($website_icon = get_field('website__icon', 'options')) {
echo $website_icon;
}
echo '<a href="' . add_http($website_address) . '" target="_blank" rel="nofollow">' .
remove_http($website_address) .
'</a>';
?>
</li>
<?php endif; ?>
Przeczytaj więcej
Przeczytaj więcej