問題描述

我已經搜索了高低的一個簡單的解決方案,但是無濟於事。 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 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。