PHP-使用span标记包装图像
您好,我正在尝试将包含特定类(本例中为pin)的图像包装到一个范围中,我将为该范围添加模式信息。这是一个基本示例,我还需要注入其他模式信息。为了让我开始,谁能帮助我从现有代码到示例输出。我需要动态更新多个页面,其中一些内容将通过PHP从Wordpress分类法和其他数据中获取,因此如果可能,我更愿意使用PHP进行更新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"
<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中注入ingspan
将需要jQuery……你不觉得吗??)谢谢,这看起来很有趣。我确信这一行是$html=''代码>这是如何变得通用的(例如image href、source、class和alt text肯定会有所不同)。结构应始终相同,并且始终存在pinthis
类。代码将img标记与pinthis类隔离,然后在其周围添加一个span包装器。它不会修改HTML的其余部分,这些内容可以是任何内容。谢谢Pierre,因此需要$HTML=
顶行,但实际上可以说任何内容?是的,它是您想要修改的任何HTML。我把它放在那里作为例子。我不知道你是如何得到你想要处理的HTML的,所以你必须弄清楚这一部分。啊,在这种情况下,我怀疑类似于$HTML=get_the_content()
将检索整个帖子,然后剩下的代码将开始处理它。我会再研究一下。非常感谢。