web-dev-qa-db-de.com

ACF prüft, ob die Variable http hat, andernfalls wird ein String zurückgegeben

Versucht zu überprüfen, ob $linkhttp:// vor sich hat oder nicht. Wenn jemand www.google.com für das Linkfeld eingibt, fungiert es als Link innerhalb der WordPress-Site, dh: www.website.com/www.google.com.

$link = get_field('advertisement_link');

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

Beispielcode oben, mit dem ich arbeite. Dies ist auch eine allgemeine PHP Frage. Wie mache ich das richtig? Ersetzt the_content() durch den $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>';

Bearbeiten: Ich muss $ad_code behalten, da ich ihn in return prefix_insert_after_paragraph( $ad_code, 3, $content ); verwende, um diese Anzeige alle 3 Absätze in einen Beitrag einzufügen.

1

Sie dürfen den Wert nicht return, sondern müssen den varialbe $link ändern.

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

Beachten Sie, dass Ihr Link, wenn er mit https:// beginnt, auch dem http:// vorangeht und zu http://https://example.com führt.

Der bessere Weg dies zu tun wäre von hier , angepasst an Ihre Bedürfnisse:

In functions.php:

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

Code für Sie:

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

Ich denke, dies ist ein mögliches Duplikat von - oder zumindest ähnlich wie " Prüfen, ob der String HTTP enthält: // " bei Stackoverflow - aber dennoch: Zuerst sollten Sie, anstatt auf "0" zu prüfen, auf "false" prüfen . Und dann sollten Sie auch nach "https: //" suchen. Ich würde wahrscheinlich so etwas machen:

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

(Mir ist bewusst, dass es elegantere Möglichkeiten gibt, dies zu schreiben.)

0
tillinberlin