2013-10-09 36 views
0

我知道這是一個基於WordPress的問題,但我認爲答案絕對是更獨立的PHP。精簡此PHP片段

在我爲客戶做的幾乎每個網站上,我都要添加一些來自選項頁面的社交媒體鏈接。我目前使用這種片段;

$twt = of_get_option('twitter'); 
$fcb = of_get_option('facebook'); 
$ins = of_get_option('instagram'); 
if ($twt) { 
    echo '<li class="twitter"><a href="'.$twt.'">Twitter</a></li>'; 
} 
if ($fcb) { 
    echo '<li class="facebook"><a href="'.$fcb.'">Facebook</a></li>'; 
} 
if ($ins) { 
    echo '<li class="instagram"><a href="'.$ins.'">Instagram</a></li>'; 
} 

這是好的,如果只有一對夫婦的聯繫,但最近我的主要客戶之一似乎是包括太陽到他們的設計下,每一個社交媒體鏈接,以便做這種方式可以是一個有點笨重。

有沒有一種方法可以將所有東西組合成一個foreach或其他?

+0

使用的foreach將意味着使用數組以及 - 所以想想什麼樣的數據結構,可以很方便的事情了。 – CBroe

+1

這些陳述有沒有共同之處?這些陳述只有很小的部分*變量*?你可以用適當的*變量*和循環來替換這些語句嗎? – deceze

+0

@deceze在每個語句中唯一不同的部分是選項值(twitter,facebook,instagram),然後是隨附的'li'類和鏈接'href' –

回答

4

不知道你的意思是,但檢查該代碼:

foreach(array('twitter', 'facebook', 'instagram') as $source) 
    { 
    $data = of_get_option($source); 
    if($data) 
     { 
     echo '<li class="'.$source.'"><a href="'.$data.'">'.ucfirst($source).'</a></li>'; 
     } 
    } 
+2

+1這就是你經歷的一些古怪的空白空間=) – AD7six

+0

這就像一個魅力,這應該在未來的幾分鐘內我的發展時間削減+1 –

+0

我編輯此代碼SO窗口,而不是在我的IDE。刪除任何多餘的空白 - 感謝指出! –

2

你可以嘗試這樣的事:

$social_media = array(
    array('name' => 'Twitter', 'href' => of_get_option('twitter')), 
    array('name' => 'Facebook', 'href' => of_get_option('facebook')), 
    array('name' => 'Instagram', 'href' => of_get_option('instagram')) 
); 

foreach($social_media as $s) 
    echo '<li class="' . strtolower($s["name"]) . '"><a href="' . $s["href"] . '">' . $s["name"] . '</a></li>'; 

然後簡單地添加新的社交媒體網站到$social_media數組。

0

嘗試以下操作:

$social = array('Twitter', 'Facebook', 'Instagram'); 

for($i=0;$i<length($social); ++$i) { 
    $twt = of_get_option($social[$i]); 
    if ($twt) { 
     echo '<li class="' . strtolower($social[$i]) . '"><a href="' . $twt . '">' . $social[$i].  '</a></li>'; 
    } 
} 

您可以將它們添加到陣列添加額外的社交網絡。這是一個緊湊的解決方案。

6
  1. 識別共性:

    echo '<li class="twitter"><a href="'.$twt.'">Twitter</a></li>'; 
    ^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^ 
    
  2. 識別不同部分:

    echo '<li class="twitter"><a href="'.$twt.'">Twitter</a></li>'; 
           ^^^^^^^      ^^^^^^^ 
    
  3. 識別依賴關係和關係:

    $twt取決於of_get_option(...)其參數是相同twitter in 2.
    服務的類和名稱相互依賴。他們之間的關係顯然是這個名字只是該類的第一個字母大寫版本,但我不會依賴這個名字。

統一:

$services = array(
    'twitter' => 'Twitter', 
    'facebook' => 'Facebook' 
    ... 
); 

foreach ($services as $service => $name) { 
    if ($url = of_get_option($service)) { 
     printf('<li class="%s"><a href="%s">%s</a></li>', $service, $url, $name); 
     // or, if you can't be sure that the variables are safe for HTML interpolation: 
     // printf('<li class="%s"><a href="%s">%s</a></li>', htmlspecialchars($service), htmlspecialchars($url), htmlspecialchars($name)); 
    } 
} 
+2

+1幫助OP自己解決問題。 – dunc