日前台南小聚的時候,現場有人詢問到關於在後台個人資料中的自傳資訊欄位,想要將超連結設定為於新分頁開啟,但在儲存後發現額外加入的程式碼不見,想要知道有什麼解決方案。
身為在 WordPress 開發多年的可憐工程師,立刻想到就是 WordPress 做的太安全了。
因為 WordPress 設計上是可以給很多人共同使用的,為了避免有壞心的使用者加入一些有問題的程式碼,所以對於輸入內容有進行一些安全性過濾的動作。
而讓超連結在新分頁只需要在超連結的標籤中加入 target="_blank"
這一小段就好,偏偏他就是屬於 WordPress 不允許使用的內容之一。所以為了達成那位使用者的願望,就是讓 WordPress 不要過濾輸入的內容即可。
當下翻查研究了一下後,就請他加入以下的程式碼,完全的停止安全性過濾就搞定了
remove_filter('pre_user_description', 'wp_filter_kses');
後來在寫這篇文章的時候,想到 WordPress 既然只會將 target
刪除,所以應該會有一個白名單的列表來說明那些標籤跟屬性是可以使用的,所以就繼續深入追查程式碼後發現,我的想法是正確的。可以改用以下的方式來開放我們需要使用到標籤跟屬性就好。不用為了方便完全的犧牲安全。
add_filter('wp_kses_allowed_html', function($tags, $context) {
if( $context == 'pre_user_description' ) {
$tags['a']['target'] = true;
}
return $tags;
}, 10, 2);
如果你不知道如何加入程式碼到你的網站,或是需要一個輕鬆簡單的方法加入程式碼,推薦使用 Code Snippets。
他是一款讓你在後台就可以輕鬆加入程式碼到網站中的外掛。並且加入的程式碼還可以個別的設定啟用或停用,讓你輕鬆的管理這些額外加入的程式碼片段。
如果對於該外掛使用上有疑問,請至外掛頁面觀看說明或是與官方團隊聯繫。
請問我加入functions.php 但還是不行~~是加錯地方嗎