PHP-使用span标记包装图像

PHP-使用span标记包装图像,php,html,wordpress,Php,Html,Wordpress,您好,我正在尝试将包含特定类(本例中为pin)的图像包装到一个范围中,我将为该范围添加模式信息。这是一个基本示例,我还需要注入其他模式信息。为了让我开始,谁能帮助我从现有代码到示例输出。我需要动态更新多个页面,其中一些内容将通过PHP从Wordpress分类法和其他数据中获取,因此如果可能,我更愿意使用PHP进行更新 <p> <a class="fancybox" rel="gallery1" href="image.jpg"> <img src="img.jpg"

您好,我正在尝试将包含特定类(本例中为pin)的图像包装到一个范围中,我将为该范围添加模式信息。这是一个基本示例,我还需要注入其他模式信息。为了让我开始,谁能帮助我从现有代码到示例输出。我需要动态更新多个页面,其中一些内容将通过PHP从Wordpress分类法和其他数据中获取,因此如果可能,我更愿意使用PHP进行更新

<p>
<a class="fancybox" rel="gallery1" href="image.jpg">
<img src="img.jpg" alt="alt text" width="1000" height="1000" class="various classes including ... pinthis">
</a>
</p>

我想成为

<p>
<a class="fancybox" rel="gallery1" href="image.jpg">
<span itemscope itemtype="http://schema.org/ImageObject">
<img src="img.jpg" alt="alt text" width="1000" height="1000" class="various classes including ... pinthis">
</span>
</a>
</p>

我想如果有人能给我指出正确的方向,给我一个推动的开始,这将给我足够的时间从那里继续下去

非常感谢。

使用

  • 检查
    图像
    是否需要

  • 如果图像具有类,则使用所需的

试着这样做:

if ($('img.classes').hasClass('pinthis')){
       $('img.classes').wrapAll('<span itemscope itemtype="http://schema.org/ImageObject">></span>');
}
if($('img.classes').hasClass('pinthis')){
$('img.classes').wrapAll('>');
}


有用的线程:

使用PHP DOMDocument,您可以执行以下操作:

$html = '<p><a class="fancybox" rel="gallery1" href="image.jpg"><img src="img.jpg" alt="alt text" width="1000" height="1000" class="various classes pinthis"></a></p>';

// Create a DOMDocument and load the HTML.
$dom = new DOMDocument();
$dom->loadHTML($html);

// Create the span wrapper.
$span = $dom->createElement('span');
$span->setAttribute('itemscope', '');
$span->setAttribute('itemtype', 'http://schema.org/ImageObject');

// Get all the images. 
$images = $dom->getElementsByTagName('img');

// Loop the images.
foreach ($images as $image) {

    // Only affect those with the pinthis class.
    if (strpos($image->getAttribute('class'), 'pinthis') !== false) {

        // Clone the span if we need to use it often.
        $span_clone = $span->cloneNode();

        // Replace the image tag with the span tag.
        $image->parentNode->replaceChild($span_clone, $image);

        // Add the image tag as a child of the new span tag.
        $span_clone->appendChild($image);
    }
}

// Get your HTML with saveHTML()
$html = $dom->saveHTML();
echo $html; 
$html='

'; //创建DOMDocument并加载HTML。 $dom=新的DOMDocument(); $dom->loadHTML($html); //创建span包装器。 $span=$dom->createElement('span'); $span->setAttribute('itemscope',''; $span->setAttribute('itemtype','http://schema.org/ImageObject'); //获取所有图像。 $images=$dom->getElementsByTagName('img'); //循环图像。 foreach($images作为$image){ //只影响本课程中有PIN的学生。 if(strpos($image->getAttribute('class'),'pinthis')!==false){ //如果需要经常使用,请克隆span。 $span_clone=$span->cloneNode(); //用span标记替换图像标记。 $image->parentNode->replaceChild($span\u clone,$image); //将图像标记添加为新span标记的子级。 $span_clone->appendChild($image); } } //使用saveHTML()获取您的HTML $html=$dom->saveHTML(); echo$html;
只需修改代码以满足您的特定需要。例如,如果您需要更改span标记属性,如果您正在更改用于搜索的类,等等。。。您甚至可能希望创建一个可以指定类和跨度属性的函数


DOMDocument文档:

您是否有输出您提供的整个HTML的函数或代码?您需要解析现有HTML输出并对其进行修改的代码,或者您需要修改生成此输出的函数?谢谢-不,这是我的问题。这些都是Wordpress单独撰写的帖子。我可以看到的一个常见元素是,我可以使用它来标识我想要用模式信息包装的图像,它们包含“pinthis”类,这是我手动添加的一个类,与第三方插件相关。我唯一能看到的另一个选择是手动编辑所有帖子,但那将是相当多的。这对seo目的没有帮助。js将在页面加载后呈现,这样机器人就看不到标签了。@artuc:
我需要动态更新多个页面
-你有更好的解决方案吗??我不知道PHP如何能够在动态级别上做到这一点,加上SEO在哪里被提及?这不是一个解决方案,您正在为SEO目的添加微格式数据,这将帮助您获得更好的SEO排名。在javascript中添加/删除dom元素对解决方案没有任何影响。这就是为什么这个答案是无用的。@artuc:好吧……我很想看看PHP是如何解决这个问题的……但据我所知,结合PHP,动态素材仍然需要使用某种形式的jQuery,此外,在现有DOM中注入ing
span
将需要jQuery……你不觉得吗??)谢谢,这看起来很有趣。我确信这一行是
$html='

'这是如何变得通用的(例如image href、source、class和alt text肯定会有所不同)。结构应始终相同,并且始终存在
pinthis
类。代码将img标记与pinthis类隔离,然后在其周围添加一个span包装器。它不会修改HTML的其余部分,这些内容可以是任何内容。谢谢Pierre,因此需要
$HTML=
顶行,但实际上可以说任何内容?是的,它是您想要修改的任何HTML。我把它放在那里作为例子。我不知道你是如何得到你想要处理的HTML的,所以你必须弄清楚这一部分。啊,在这种情况下,我怀疑类似于
$HTML=get_the_content()
将检索整个帖子,然后剩下的代码将开始处理它。我会再研究一下。非常感谢。