简化此 PHP 代码段


Streamline this PHP snippet

我知道这是一个基于Wordpress的问题,但我认为答案肯定是更独立的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或其他东西?

  1. 确定共性:

    echo '<li class="twitter"><a href="'.$twt.'">Twitter</a></li>';
    ^^^^^^^^^^^^^^^^^       ^^^^^^^^^^^^^^^^^^^^^       ^^^^^^^^^^^
    
  2. 识别不同的部件:

    echo '<li class="twitter"><a href="'.$twt.'">Twitter</a></li>';
                     ^^^^^^^                     ^^^^^^^
    
  3. 确定依赖关系和关系:

    $twt取决于参数与 2 中的twitter相同的of_get_option(...)
    服务的类和名称相互依赖。他们的关系显然是名称只是类的第一个字母大写版本,但我不一定依赖它。

统一:

$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));
    }
}

不知道你是否就是这个意思,但请检查以下代码:

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>';
        }
    }

你可以尝试这样的事情:

$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数组中即可。

尝试以下操作:

$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>';
    }
}

您可以通过将其他社交网络添加到数组来添加它们。这是一个紧凑的解决方案。