web-dev-qa-db-fra.com

ACF vérifie si la variable a http, sinon retourne une chaîne

Essayer de vérifier si $link a http:// devant ou non. Si quelqu'un met www.google.com dans le champ du lien, il agit comme un lien dans le site WordPress, c'est-à-dire: www.website.com/www.google.com.

$link = get_field('advertisement_link');

$ad_code = '<a href="'.$link.'" target="_blank">Test</a>';

Exemple de code ci-dessus, je travaille avec. Ceci est également une question générale PHP. Comment puis-je le faire de la bonne façon? Essayé ci-dessous, remplace the_content() par le $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>';

Edit: Je dois garder $ad_code car je l’utilise dans return prefix_insert_after_paragraph( $ad_code, 3, $content ); pour insérer cette annonce dans un message tous les 3 paragraphes.

1
Alexander Graham

Vous ne devez pas return la valeur, mais modifier le varialbe $link

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

Sachez que si votre lien commence par https://, il précédera également le http:// et donnera http://https://example.com.

La meilleure façon de le faire serait de ici , ajusté à vos besoins:

Dans functions.php:

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

Code pour vous:

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

Je suppose que ceci est un doublon possible de - ou du moins similaire à " Vérification si la chaîne contient HTTP: // " sur stackoverflow - mais quand même: Tout d'abord, au lieu de rechercher "0", vous devez rechercher "faux" . Et ensuite, vous devriez également vérifier "https: //". Je ferais probablement quelque chose comme ça:

if (substr($link, 0, 7) == 'http://') {
    // do nothing
} elseif (substr($link, 0, 8) == 'https://') {
    // do nothing
} else {
    $link = 'http://'.$link;
}

(Je suis conscient qu'il y a des manières plus élégantes d'écrire ceci)

0
tillinberlin