0

我知道这是一个基于 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或什么?

4

4 回答 4

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取决于谁的参数与2of_get_option(...)中的相同。 类和服务的名称相互依赖。他们的关系显然是该名称只是该类的首字母大写版本,但我不一定会依赖它。twitter

统一:

$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));
    }
}
于 2013-10-09T09:43:35.303 回答
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>';
        }
    }
于 2013-10-09T09:41:26.823 回答
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阵列中。

于 2013-10-09T09:42:29.057 回答
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>';
    }
}

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

于 2013-10-09T09:42:33.237 回答