ACF检查变量是否有http,否则返回字符串

时间:2016-02-24 作者:Alexander Graham

正在尝试检查$linkhttp:// 是否在它前面。如果有人插手www.google.com 对于链接字段,它充当WordPress站点内的链接,即:www.website.com/www.google.com.

$link = get_field(\'advertisement_link\');

$ad_code = \'<a href="\'.$link.\'" target="_blank">Test</a>\';
我正在使用上面的示例代码。这也是一个常见的PHP问题。我该怎么做才对呢?在下面尝试,替换the_content() 使用$link.

$link = get_field(\'advertisement_link\');

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

$ad_code = \'<a href="\'.$link.\'" target="_blank">Test</a>\';
编辑:我需要保留$ad_code 因为我在里面用return prefix_insert_after_paragraph( $ad_code, 3, $content ); 每3段将此广告插入帖子。

2 个回复
最合适的回答,由SO网友:fischi 整理而成

你不能return 值,但更改变量$link

if(strpos($link, \'http://\') !== 0) {
    $link = \'http://\' . $link;
} //no else needed
请注意,如果您的链接以https:// 它还将为http:// 并导致http://https://example.com.

更好的方法是here, 根据您的需要进行调整:

在里面functions.php:

function addhttp($url) {
    if (!preg_match("~^(?:f|ht)tps?://~i", $url)) {
        $url = "http://" . $url;
    }
    return $url;
}
您的代码:

$link = addhttp( get_field(\'advertisement_link\') );
$ad_code = \'<a href="\'.$link.\'" target="_blank">Test</a>\';

SO网友:tillinberlin

我想这可能是重复的,或者至少类似于“Checking if string contains HTTP://“在stackoverflow上结束–但仍然是:首先,你不应该检查“0”,而应该检查“false”。然后,你还应该检查“https://”。我可能会这样做:

if (substr($link, 0, 7) == \'http://\') {
    // do nothing
} elseif (substr($link, 0, 8) == \'https://\') {
    // do nothing
} else {
    $link = \'http://\'.$link;
}
(我知道写这篇文章有更优雅的方式)