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