欢迎光临
我们一直在努力

禁止WordPress评论里的网址自动转换为可点击的链接

建站超值云服务器,限时71元/月

本文目录
[隐藏]

  • 1解决方案
  • 2为什么链接被自动转换
  • 3举一反三
  • 4结语

近来有人在评论中添加了一些网址,可恶的是,WordPress默认会为这些评论中的网址自动添加链接,那么如何防止WordPress评论里的网址自动转换为可点击的链接呢?

解决方案

编辑你的WordPress主题的functions.php文件,在其中添加如下代码:

1
remove_filter( 'comment_text', 'make_clickable',  9 );

remove_filter( ‘comment_text’, ‘make_clickable’, 9 );

添加以上代码后,不但可以防止新发表的评论中的网址自动添加链接,而且可以去除之前的已经发布的评论中的网址链接。

非常简单对吗?但只是知道这个似乎意义不大,学习讲究举一反三,知道这样做的理由似乎更重要。

为什么链接被自动转换

禁用的方法很简单,但我喜欢弄清来龙去脉。先说一下为什么链接会被自动转换。

WordPress加载过程中会include一个叫做default-filters.php的文件,位于wp-includes/目录下,该文件包含WordPress默认添加的actions和filters,看一下这个文件,满眼的add_action或者add_filter。

在评论表单中,用 comment_text() 函数输出用户的评论,comment_text()函数提供了一个filter叫做comment_text,在comment_text()函数返回评论结果前过滤结果。WordPress默认向这个filter添加了哪些函数?打开default-filters.php看一下,发现添加了如下功能:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
//将Wordpress更正为WordPress
add_filter( 'comment_text', 'capital_P_dangit', 31 );
//格式化特殊符号
add_filter( 'comment_text', 'wptexturize' );
//转换符号,例如将<br>变成<br />
add_filter( 'comment_text', 'convert_chars' );
//将url自动变成可点击的链接,我们要找的东西
add_filter( 'comment_text', 'make_clickable',  9 );
//如其名字所说,将不完整的标签补全
add_filter( 'comment_text', 'force_balance_tags', 25 );
//将符号转换为表情
add_filter( 'comment_text', 'convert_smilies', 20 );
//自动添加<p>和<br />标签
add_filter( 'comment_text', 'wpautop',  30 );

//将Wordpress更正为WordPress add_filter( ‘comment_text’, ‘capital_P_dangit’, 31 ); //格式化特殊符号 add_filter( ‘comment_text’, ‘wptexturize’ ); //转换符号,例如将<br>变成<br /> add_filter( ‘comment_text’, ‘convert_chars’ ); //将url自动变成可点击的链接,我们要找的东西 add_filter( ‘comment_text’, ‘make_clickable’, 9 ); //如其名字所说,将不完整的标签补全 add_filter( ‘comment_text’, ‘force_balance_tags’, 25 ); //将符号转换为表情 add_filter( ‘comment_text’, ‘convert_smilies’, 20 ); //自动添加<p>和<br />标签 add_filter( ‘comment_text’, ‘wpautop’, 30 );

WordPress将评论存入数据库时,是原封不动的存入的,例如用户输入

1
<blockquote>引用 <strong>小明的话

<blockquote>引用 <strong>小明的话

数据库存入的内容和上面相同,标签结构是不完整的,当程序调用comment_text()函数输出评论内容时,数据需要被上面提到的7个函数过滤一遍,当被force_balance_tags()处理时,就会将标签补全,于是输出的结果是

1
<blockquote>引用 <strong>小明的话</strong></blockquote>

<blockquote>引用 <strong>小明的话</strong></blockquote>

既然WordPress用add_filter添加了make_clickable功能,我们只需要用于其相反的remove_filter移除这个功能就可以了,于是就有了开头的解决方案。

remove_filter中的9代表什么?

添加filter时,9代表优先级,规定了所有添加到某个hook的函数的执行顺序,移除的时候也一样。想象一下add_filter会让一个函数进入队列排队,数字越大的排的越靠后,即执行越晚。当我们需要移除某个函数时,必须保证移除功能在添加功能之后执行,在该函数还没有添加的时候移除它,没有任何意义。

make_clickable函数位于wp-includes/formatting.php中,不仅将链接变成可点击的,而且会自动添加rel=”nofollow”属性,如果你希望跟随某些链接,可以先移除默认的功能,然后写一个自己的功能加进去。

举一反三

这种remove_filter和add_filter的把戏可以用到很多地方,比如很多插件会用wp_enqueue_script和wp_enqueue_style添加自己的脚本和样式表,如果插件把脚本放到head中,可能会拖慢网页加载速度;有的插件自带的样式表只有几句话,单独存放成一个文件完全没必要,这些行为都会让你的head标签内容变长,对SEO也是有害的。你想制止这种行为,怎么办?

用上面提到的先remove再add的思想,只不过这次我们调用的是另外两对函数:

  • wp_dequeue_style
  • wp_enqueue_style
  • wp_dequeue_script
  • wp_enqueue_script

例如,想将WP-PageNavi插件的样式表移除,将样式合并到主题的style.css中,可以在functions.php中如是说

1
2
3
4
add_action('wp_print_styles', 'dequeue_stylesheets');
function dequeue_stylesheets() {
   wp_dequeue_style('wp-pagenavi');
}

add_action(‘wp_print_styles’, ‘dequeue_stylesheets’); function dequeue_stylesheets() { wp_dequeue_style(‘wp-pagenavi’); }

这样WP-PageNavi的样式表link就从head中消失了。

再举个移动脚本的例子,wp-codebox插件默认将脚本codebox.js放在head中,我希望将其挪到</body>标签之前,在主题的functions.php中写如下代码

1
2
3
4
5
6
7
add_action('wp_print_scripts', 'move_codebox_script');
function move_codebox_script() {
    wp_dequeue_script('codebox');
    wp_enqueue_script('codebox', get_bloginfo ( 'wpurl' )
 . '/wp-content/plugins/wp-codebox/js/codebox.js',
 array('jquery'), '0.1',1,true)

add_action(‘wp_print_scripts’, ‘move_codebox_script’); function move_codebox_script() { wp_dequeue_script(‘codebox’); wp_enqueue_script(‘codebox’, get_bloginfo ( ‘wpurl’ ) . ‘/wp-content/plugins/wp-codebox/js/codebox.js’, array(‘jquery’), ‘0.1’,1,true); }

同样,先注销这个脚本, 再引入。注意wp_enqueue_scriopt函数最后一个参数设置为true,即表示在footer引入脚本。

通过这种方法,可以达到优化网站结构的目的,最佳模式是:

  • 样式表在head中引入
  • 脚本在</body>标签前引入
  • 引入的样式表和脚本越少越好,这样可以减少http请求次数,方法是将所有脚本合并,所有样式表合并,当然这样会令使用便利性打折扣,平衡在哪里要根据自己的具体情况来。
  • 异步请求的追踪脚本,例如google分析脚本,推荐加载head中。

结语

从禁止评论自动转换URL为可点击的链接找到了根源,了解了如何知晓WordPress默认添加了哪些filter函数(翻阅default-filters.php),知道WordPress有哪些格式化函数(查看formatting.php)。

赞(0)
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » 禁止WordPress评论里的网址自动转换为可点击的链接
分享到: 更多 (0)