问题描述

我已经搜索了高低的一个简单的解决方案,但是无济于事。 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()中是硬编码的,不幸的是列表不被过滤。

我会做的是:

  1. wpautop()不同名称。
  2. img 添加到 $allblocks 变量中正则表达式。
  3. the_content 过滤器中取出 wpautop
  4. 将您的分叉版本添加到 the_content
  5. 您可能需要优先播放,并可能删除和 re-add 其他过滤器,如果由于更改的处理顺序而有所突破。

参考文献

注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。