所以这是针对 WordPress 的。我要做的是在我的主题的functions.php 文件中进行一些修改。我要做的就是获取 WordPress 图像的 ID,然后<div>
在图像本身之后添加一个 IF 图像包含类dd-star-rating
。
笔记:
图像 ID 在“类”属性中。它将类似于
wp-image-X
(X
图像的 ID 在哪里)。我希望它存储在一个名为的变量中$id
我希望它在
<div>Star Rating ID = $id</div>
每个具有该类的图像之后添加dd-star-rating
下面是存储在$content
变量中的示例:
<p>Nunc et neque risus. Nam a nisl eu magna rutrum euismod ac in lorem. Aenean varius accumsan ligula tincidunt malesuada. In diam lectus, pharetra quis cursus in, egestas vitae tellus. In neque arcu, aliquet ut egestas in, ultrices id ligula. Suspendisse ut dolor ligula, sit amet placerat ligula. Ut viverra nisi id ante facilisis pharetra. Aenean scelerisque, leo eget accumsan condimentum, odio libero ultrices enim, pretium placerat sapien purus nec odio. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Curabitur bibendum viverra pellentesque. Pellentesque eu diam non eros consectetur semper nec sed nisl.</p>
<p style="text-align: center;"><img class="size-full wp-image-44 aligncenter concept dd-star-rating" alt="concept" src="http://www.mysite.com/wp-content/uploads/2012/12/concept.png" width="720" height="540" /></p>
<p style="text-align: center;"><img class="size-full wp-image-45 aligncenter concept dd-star-rating" alt="concept" src="http://www.mysite.com/wp-content/uploads/2012/12/concept2.png" width="720" height="540" /></p>
<p>Nulla eros ante, lobortis in convallis eget, dignissim ut quam. Proin nisi nunc, iaculis ac auctor eu, tincidunt ac augue. Nunc purus nisi, sollicitudin nec luctus ullamcorper, dictum id magna. Sed quis nisi sagittis sapien placerat semper vitae tempus leo. Suspendisse sem diam, eleifend in blandit sed, pellentesque ac nisl. Morbi tincidunt adipiscing augue in pharetra. Duis dapibus bibendum egestas. Phasellus dictum dapibus quam id fermentum. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas.</p>
所以对于这两个图像,因为它们包含dd-star-rating
类,我希望$content
变量的值更改为:
<p>Nunc et neque risus. Nam a nisl eu magna rutrum euismod ac in lorem. Aenean varius accumsan ligula tincidunt malesuada. In diam lectus, pharetra quis cursus in, egestas vitae tellus. In neque arcu, aliquet ut egestas in, ultrices id ligula. Suspendisse ut dolor ligula, sit amet placerat ligula. Ut viverra nisi id ante facilisis pharetra. Aenean scelerisque, leo eget accumsan condimentum, odio libero ultrices enim, pretium placerat sapien purus nec odio. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Curabitur bibendum viverra pellentesque. Pellentesque eu diam non eros consectetur semper nec sed nisl.</p>
<p style="text-align: center;"><img class="size-full wp-image-44 aligncenter concept dd-star-rating" alt="concept" src="http://www.mysite.com/wp-content/uploads/2012/12/concept.png" width="720" height="540" /></p>
<div>Star Rating ID = 44</div>
<p style="text-align: center;"><img class="size-full wp-image-45 aligncenter concept dd-star-rating" alt="concept" src="http://www.mysite.com/wp-content/uploads/2012/12/concept2.png" width="720" height="540" /></p>
<div>Star Rating ID = 45</div>
<p>Nulla eros ante, lobortis in convallis eget, dignissim ut quam. Proin nisi nunc, iaculis ac auctor eu, tincidunt ac augue. Nunc purus nisi, sollicitudin nec luctus ullamcorper, dictum id magna. Sed quis nisi sagittis sapien placerat semper vitae tempus leo. Suspendisse sem diam, eleifend in blandit sed, pellentesque ac nisl. Morbi tincidunt adipiscing augue in pharetra. Duis dapibus bibendum egestas. Phasellus dictum dapibus quam id fermentum. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas.</p>
现在这是我的代码,在我的主题 functions.php 文件中:
add_filter( 'the_content' , 'dd_wrap_image' );
function dd_wrap_image ( $content )
{
$dom = new DOMDocument;
$dom->loadHTML($content);
$imgs = $dom->getElementsByTagName('img');
foreach($imgs as $img)
{
if ($img->hasAttribute('class') && strstr($img->getAttribute('class'), 'dd-star-rating'))
{
// get the "wp-image-X" ID and store into $id variable
// add "<div>Star Rating ID = $id</div>" after image
$class_array = explode(' ', $img->getAttribute('class'));
foreach ($class_array as $k => $v)
{
if (strstr($v, 'wp-image'))
{
$id = end(explode('-', $v));
}
}
if (!empty($id))
{
$img->appendChild("<div>Star Rating ID = $id</div>");
}
}
}
$dom->saveHTML();
return $content;
}
如您所见,我在条件语句中需要一些帮助。正则表达式匹配最适合用preg_match()
? <div>
在每个图像之后添加的最佳方法是什么?使用str_replace()
?
编辑:
更新了我的代码。但是现在出现错误Argument 1 passed to DOMNode::appendChild() must be an instance of DOMNode, string given
再次编辑:
非常感谢哈克!但是,如果我想在每张图片之后添加一些更大的代码,如下所示?
假设以下代码存储在一个名为 的变量中$star_code
,我将如何使用 DOM 在图像之后插入它?
<div class="dd-star-poll" id="img-$id">
<ul class="dd-star-poll-options">
<li><a href='#' title='1 star out of 5' class='one-star'>1</a></li>
<li><a href='#' title='2 stars out of 5' class='two-stars'>2</a></li>
<li><a href='#' title='3 stars out of 5' class='three-stars'>3</a></li>
<li><a href='#' title='4 stars out of 5' class='four-stars'>4</a></li>
<li><a href='#' title='5 stars out of 5' class='five-stars'>5</a></li>
</ul>
<div class="dd-star-poll-results">
Currently 3.5/5 Stars.
</div>
</div>