2011-12-21 5 views
7

現在、カスタムフィールド出力を使ってWordPressテーマを編集しています。 私はすべての編集を成功裏に完了し、すべてが正常に動作します。 私の問題は、カスタムフィールドにURLが送信された場合、エコーはそこにあったものなので、誰かがwww.somesite.comに入るとエコーはそれだけで、ドメインの最後に追加されます。 mysite.com www.somesite.com。 URLの前にhttp://の接頭辞が付いているかどうか確認したい場合は、最初に接頭辞を付けるかどうか確認してください。URLにhttp://が最初にあるかどうかを確認していない場合は挿入します。

私は自分の問題をできる限り良く説明してくれることを願っています。

$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

まあ、あなたはクラスとテンプレートの使い方を知っているようです。 'RegEx'、' strncmp'、または他の多くのメソッドでこれを行う方法を理解できない場合でも、 'substr'でこれを理解することができます。 – Dutchie432

+0

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

答えて

53

parse_url()最初n文字がここにfalseと評価され、等しい場合、0strncmp()戻っていることを、忘れないでください...

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

返信いただきありがとうございますが、誰かが私の例に表示されている必要なコードの例を表示する可能性がありますか? 私は合計php noobですが、ゆっくりと慣れ親しんでいますが、まだ無限のスピードを打ちました。 –

+0

http://stackoverflow.com/a/8591679/1110064 それを見て、それは動作します、私はちょうど 'sceme'部分を理解していません。このlolは何ですか –

+3

多分 'parse_url'をgoogleしてどのスキームが見えるのですか? parse_urlはキー/値項目の配列を返します。 "戻り値"を参照してください。http://php.net/manual/en/function.parse-url.php – Dutchie432

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

を助けることができます。それはちょっと混乱するかもしれません。

+0

文字列関数を使うとcaseや 'https:// 'を扱うのが難しくなります – DaveRandom

+1

私の編集を見てください。あなたは、これが起こるかもしれない唯一の2つのスキームであると仮定することができます。とにかくあなたの答えをアップアップしました、それは明らかにクリーンなものです;)それは私がそれを繰り返す場合、したがって、私は代わりに、ほとんどのケースをカバーするかもしれないが、 "それはきれいではないかもしれません。今の場合も無関係 – KingCrunch

8

http://strpos()を使用して文字列の先頭にあるかどうかを確認できます。それはVARの先頭にhttp://を持っていない場合

$var = 'www.somesite.com'; 

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

この方法で、それはそれの前にhttp://を返します。それ以外の場合は、$varが返されます。

+5

大文字小文字が一致しない場合、またはURLが 'https://'で始まる場合、これは失敗します – Dutchie432

+0

その場合、 'if(!preg_match( '#^ https? ://# '、$ var)){' –