исправление несоответствия ссылок href и img src в большом количестве фрагментов html, сохраненных в базе данных WordPress - PullRequest
0 голосов
/ 14 апреля 2011

После использования плагина кэширования для исправления многочисленных горячих ссылок некоторые из сгенерированных HTML, сохраненных в базе данных, не совсем верны. Например:

<a href="http://www.mbird.com/wp-content/uploads/2011/04/psycho_blanket.jpg"><img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 164px; height: 251px;" src="http://www.mbird.com/wp-content/uploads/2011/04/psycho_blanket1.jpg" alt="" id="BLOGGER_PHOTO_ID_5306768463834252178" border="0"></a>

В других случаях перед расширением добавляется еще 2. В других случаях есть 21.

Как видите, href и src не согласны. Правильный ответ.

Рекомендации по исправлению? Я думаю, мне нужно сделать регулярное выражение для связанных изображений в post_content, чтобы проверить это? У меня нет большого опыта в регулярных выражениях в php, и мне нужна помощь.

$posts = get_posts();

foreach( $posts as $post ) {

    // retrieve content of post; same as $post->post_content
    $content = $post['post_content'];

    // do stuff that I'm unsure about with $content to hone in on linked images with mismatched filenames and fix them

    // write it back
    $post['post_content'] = '$content;

   // Update the post into the database
   wp_update_post( $my_post );
}

Ответы [ 2 ]

1 голос
/ 14 апреля 2011

Это проверенное решение для регулярных выражений должно делать это:

$re = '% # Match IMG wrapped in A element.
(<a\b[^>]+?href=")([^"]*)("[^>]*><img\b[^>]+?src=")([^"]*)("[^>]*></a>)
%ix';
$content = preg_replace($re, '$1$2$3$2$5', $content);

При наличии элемента IMG, заключенного в элемент A, этот код заменяет атрибут SRC элемента IMG атрибутом HREF элемента A.Предполагается, что все значения атрибутов HREF и SRC заключены в двойные кавычки.

0 голосов
/ 14 апреля 2011

Это легко сделать с помощью регулярных выражений.Но я был бы ленив здесь и прибегнул к phpQuery или QueryPath (кажется, что это разовая операция, поэтому вам не нужно следить за производительностью):

$html = qp($content);

foreach ($html->find("a img") as $img) {

    $img->attr("src",
          $img->parent()->attr("href")
    );  // or maybe add some if checks here
}

$post["post_content"] = $html->top("body")->writeHTML();

Неиспытания.Вам также может понадобиться более конкретный селектор, чем "a img".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...