一直有一個很詭異的情況,就是在wordpress裡不能加入視頻代碼,具體是在後台編輯器文本模式下添加視頻代碼後,切換到可視化能正常看到視頻框,但保存後視頻代碼消息。
仔細觀察後發現作者不能添加,而編輯和管理員能添加。
不吊胃口,先說解決方案:說穿了很簡單,安裝一個插件“用戶角色編輯器“,將作者角色下的”不過濾html標簽“勾上即可。
1. debug,發現如下代碼調用順序:
wp_update_post->
wp_insert_post->
sanitize_post->
sanitize_post_field->
2.
content_save_pre.
wp_filter_post_kses');。
function kses_init() {
kses_remove_filters();
if (current_user_can('unfiltered_html') == false)
kses_init_filters();
}
add_action('init', 'kses_init');
add_action('set_current_user', 'kses_init');
這時發現就是屬於當前用戶沒有unfilter_html的這個權限了。
解決方案
1. 嘗試將這個wp_filter_post_kses 利用函數remove_filter去掉,但這就出現一個add_filter與remove_filter的先後關系問題,但我加的地方remove_filter竟然在add_filter之前。
這樣子即使找到一個巧妙的地方將remove加進去,也太依賴這個先後關系,保不誰出大亂子。
2. 直接給用戶賦預unfilter_html權限,這樣子一個缺點是將kses_init_filters裡的一系列函數都給刪掉了。考慮到這個是自己的博客,作者都是是指定的幾個人,而且此解決方法易於理解,沒有那麼多繞繞,就決定用這種方法了。
wordpress真強大,也真夠折騰人的。