2017-05-29 2 views
1

Ich möchte Bild Alt-Tags des Inhalts ersetzen. So habe ich preg_replaceWie Bild 'Alt' Attribut ersetzen, wenn es leer ist?

add_filter('the_content', 'click_to_expand_gallery'); 
function click_to_expand_gallery($content) { 
     $pattern ='~<a(.*?)href=(.*?)><img(.*?)alt="(.*?)"></a>~i'; 
     $replacement = '<a$1href=$2><img$3alt="Game"></a>'; 
     $content = preg_replace($pattern, $replacement, $content); 
    } 

Es funktioniert gut, aber das Problem ist, dieser Code ersetzt die Alt-Tags, wenn es bereits Daten.

Kann mir bitte jemand sagen, wie man überprüft, ob das alt-Tag leer ist oder nicht und dann seine Daten entsprechend ersetzen.

Antwort

1

Passen Sie den Vollstring nur an, wenn alt einen leeren Wert hat. Erfassen Sie die beiden Teile, die unverändert bleiben und sie auf beiden Seiten des Standardwert "Game" in $replacement:

Methode (Demo):

$pattern ='~(<a.*? href=[^>]*><img.*? alt=")("[^>]*></a>)~i'; 
$replacement = '$1Game$2'; 
$content = preg_replace($pattern, $replacement, $content); 
echo $content; 

Input/Output:

$content='<a href="something.com"><img src="blah.jpg" alt=""></a>'; 
// output: <a href="something.com"><img src="blah.jpg" alt="Game"></a> 

$content='<a href="something.com"><img src="blah.jpg" alt="Not Empty"></a>'; 
// output: <a href="something.com"><img src="blah.jpg" alt="Not Empty"></a> 

Pattern Demo

Nun entspricht dies buchstäblich einem <a> Tag mit einem href-Attribut und das kann auch o keine oder mehrere andere Attribute enthalten, die ein -Tag enthalten, das ein leeres alt-Attribut haben muss und keine oder mehrere andere Attribute aufweisen darf.

Wenn Sie nicht überprüfen möchten, ob der Tag in einem Anker-Tag verschachtelt ist, kann das Regex-Muster so reduziert werden, dass es nur dem <img>-Bereich entspricht.

+0

Können Sie mir bitte erklären, ' '~ (] *>) ~ i';' dieser Code oder jegliche Referenz tuts. –

+0

@RockySena Ich muss dieses Muster besser verfeinern. Es funktioniert, aber ich hatte keine Zeit zu optimieren. Ich bin gerade bei meiner Familie. Ich werde so schnell wie möglich zurück sein. Ich werde eine Erklärung geben. – mickmackusa

+0

Vielen Dank ... mickmackusa –

Verwandte Themen