问题描述
我已经搜索了高低的一个简单的解决方案,但是无济于事。 WordPress 不断在 p 标签中包装我的图像,并且由于我正在处理的网站的布局的偏心性质,这是非常讨厌的。
我已经创建了一个解压缩图像的 jQuery 解决方案,但并不是那么好。它滞留在页面上的其他东西加载,所以变化很慢。有没有办法防止 WordPress 包装只有图像与 p 标签?可以运行的钩子或过滤器。
上传图像,然后将其插入所见即所得编辑器时,会发生这种情况。手动进入代码视图和删除 p 标签不是一个选项,因为客户端在技术上不是这样。
我知道图像是内联的,但是我将网站编码的图像的方式放在 div 中,并设置为阻止,因此它们是有效的代码。
最佳解决方案
这是我们昨天在一个客户端网站做的,我们遇到了这个确切的问题… 我创建了一个快速过滤器作为插件,并激活它。
<?php
/*
Plugin Name: Image P tag remover
Description: Plugin to remove p tags from around images in content outputting, after WP autop filter has added them. (oh the irony)
Version: 1.0
Author: Fublo Ltd
Author URI: http://fublo.net/
*/
function filter_ptags_on_images($content)
{
// do a regular expression replace...
// find all p tags that have just
// <p>maybe some white space<img all stuff up to /> then maybe whitespace </p>
// replace it with just the image tag...
return preg_replace('/<p>(s*)(<img .* />)(s*)</p>/iU', '2', $content);
}
// we want it to be run after the autop stuff... 10 is default.
add_filter('the_content', 'filter_ptags_on_images');
如果将其放入/ wp-content / plugins 文件夹中的 php 文件中,然后激活它,则应从包含图像的任何 para 中删除 p 标记。
我不知道 regexp 的强大程度如果与其他编辑器的输出失败 – 例如,如果 img 标签仅用> 它会失败。如果有任何事情更强大,那将是非常有帮助的。
干杯,
詹姆士
— 改进过滤器—
要处理包含在链接中的图像,它将链接保留在输出中,并删除 p 个标签。
return preg_replace('/<p>s*(<a .*>)?s*(<img .* />)s*(</a>)?s*</p>/iU', '123', $content);
次佳解决方案
基本上你需要使 WordPress 处理 img 像 block-level 元素的格式化的目的。这些元素在 wpautop()
中是硬编码的,不幸的是列表不被过滤。
我会做的是:
- 叉
wpautop()
不同名称。 - 将
img
添加到$allblocks
变量中正则表达式。 - 从
the_content
过滤器中取出wpautop
。 - 将您的分叉版本添加到
the_content
。 - 您可能需要优先播放,并可能删除和 re-add 其他过滤器,如果由于更改的处理顺序而有所突破。
参考文献
注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。