WordPress支持超链接增加magnet、ed2k 新协议的解决办法

今天无意中发现在wordpress当中插入的磁力超链接megnet跟ed2k这种出现了问题,插入后保存就被自动删除了

开始还以为是后台的WP出了问题,随后才发现原来是不支持导致的。wordpress为防范SQL注入、XSS等攻击,Wordpress会在保存内容时,自动过滤内容,导致对超链接中不支持的协议protocol头例:magnet:?自动删除掉。为了达到目的,需要在Wordpress的超链接中增加对magnet、ed2k等新协议的支持,就开始动手弄一下。

 

方法有三种:

方法一:

修改 wp-includes/post.php,将相关内容注释掉。

但这就等于抛弃Wordpress的防范体系,不太安全,不建议用!!

//$postarr = sanitize_post($postarr, 'db');

方法二:

修改 wp-includes/functions.php 的function wp_allowed_protocols()   ,直接增加需要添加的新协议

不过如果升级wp版本后,必须再次修改

  if ( empty( $protocols ) ) {
$protocols = array( 'http', 'https', 'ftp', 'ftps', 'mailto', 'news', 'irc', 'gopher', 'nntp', 'feed', 
'telnet', 'mms', 'rtsp', 'sms', 'svn', 'tel', 'fax', 'xmpp', 'webcal', 'urn' ,'magnet','ed2k');
        }

方法三:

更改主题文件theme,增加新协议支持

修改 wp-content/themes/对应的theme名称/functions.php ,增加如下内容至左后一行保存即可

function ss_allow_magnet_protocol( $protocols ){
    $protocols[] = 'magnet';
    return $protocols;
}
function ss_allow_ed2k_protocol( $protocols ){
    $protocols[] = 'ed2k';
    return $protocols;
}
add_filter( 'kses_allowed_protocols' , 'ss_allow_magnet_protocol' );
add_filter( 'kses_allowed_protocols' , 'ss_allow_ed2k_protocol' );
THE END