2011-12-21 13 views
7

Obecnie edytuję motyw Wordpress z niestandardowymi danymi wyjściowymi. Udało mi się wszystkie edycje i wszystko działa tak, jak powinno. Moim problemem jest to, że jeśli adres URL zostanie przesłany do niestandardowego pola, echo jest dokładnie tym, co było w nim, więc jeśli ktoś wejdzie na stronę www.somesite.com, echo jest właśnie tym i dodaje je do końca domeny: www. mysite.com www.somesite.com. Chcę sprawdzić, czy podany link ma przedrostek http:// na początku, czy ma on wówczas połączenie, ale jeśli nie, to wyemituj je przed adresem URL: http://.Sprawdzanie, czy adres URL ma http: // na początku i wstawianie, jeśli nie,

Mam nadzieję, że wyjaśniłem mój problem tak dobrze jak potrafię.

$custom = get_post_meta($post->ID, 'custom_field', true); 

<?php if (get_post_meta($post->ID, 'custom_field', true)) : ?> 
    <a href="<?php echo $custom ?>"> <img src="<?php echo bloginfo('template_url');?>/lib/images/social/image.png"/></a> 
    <?php endif; ?> 
+1

Wydaje się, że wiesz, jak używać klas i szablonów. Powinieneś być w stanie to zrozumieć za pomocą 'substr', nawet jeśli nie możesz wymyślić, jak to zrobić z' RegEx', 'strncmp', lub dowolną z wielu innych metod .... – Dutchie432

+0

http: // stackoverflow .pl/questions/4487794/checking-if-string-contains-http –

Odpowiedz

53

parse_url() może pomóc ...

$parsed = parse_url($urlStr); 
if (empty($parsed['scheme'])) { 
    $urlStr = 'http://' . ltrim($urlStr, '/'); 
} 
+0

lol dzięki za odpowiedzi, ale czy ktoś może pokazać mi przykładowy kod wyświetlany w moim przykładzie? Jestem całkowitym php noobem i powoli poznaję, ale wciąż uderzam w niekończące się garby prędkości. –

+0

http://stackoverflow.com/a/8591679/1110064 Wyliczyłem to i działa, po prostu nie rozumiem części "sceme". co to jest lol –

+3

Czy mógłbyś google 'parse_url' zobaczyć, jaki schemat jest? parse_url zwraca tablicę elementów klucz/wartość. Zobacz "Wartości zwracane" http://php.net/manual/en/function.parse-url.php – Dutchie432

1
echo (strncasecmp('http://', $url, 7) && strncasecmp('https://', $url, 8) ? 'http://' : '') . $url; 

Pamiętaj, że strncmp() powraca 0, gdy pierwsze n litery są równe, które ocenia się false tutaj. To może być nieco mylące.

+0

Korzystanie z funkcji ciągów sprawia, że ​​trudniej jest zajmować się przypadkiem i 'https: //' – DaveRandom

+1

Zobacz moją edycję. Możesz założyć, że będą to jedyne dwa schematy, które mogą się pojawić. Mimo to wznowiłem twoją odpowiedź, ponieważ jest to oczywista czystsza;) To nie ma sensu, jeśli ją powtórzę, dlatego zostawię moją jako alternatywę, która może obejmować większość przypadków, ale "nie jest tak czysta". Teraz także sprawa jest nieistotna. – KingCrunch

8

Można sprawdzić, czy http:// znajduje się na początku ciągu znaków, używając strpos().

$var = 'www.somesite.com'; 

if(strpos($var, 'http://') !== 0) { 
    return 'http://' . $var; 
} else { 
    return $var; 
} 

ten sposób, jeśli nie ma http:// na samym początku var powróci http:// przed nim. W przeciwnym razie po prostu zwróci sam $var.

+5

to się nie powiedzie, jeśli przypadek się nie zgadza, lub jeśli adres URL zaczyna się od 'https: //' – Dutchie432

+0

W takim przypadku można użyć logiki takiej jak 'if (! Preg_match ('#^https? : // # ', $ var)) { –

Powiązane problemy