當(dāng)前位置:首頁>WordPress建站>基礎(chǔ)教程>禁止WordPress評論里的網(wǎng)址自動轉(zhuǎn)換為可點擊的鏈接

禁止WordPress評論里的網(wǎng)址自動轉(zhuǎn)換為可點擊的鏈接

近來有人在評論中添加了一些網(wǎng)址,可惡的是,WordPress默認(rèn)會為這些評論中的網(wǎng)址自動添加鏈接,那么如何防止WordPress評論里的網(wǎng)址自動轉(zhuǎn)換為可點擊的鏈接呢?

解決方案

編輯你的WordPress主題的functions.php文件,在其中添加如下代碼:

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

添加以上代碼后,不但可以防止新發(fā)表的評論中的網(wǎng)址自動添加鏈接,而且可以去除之前的已經(jīng)發(fā)布的評論中的網(wǎng)址鏈接。

非常簡單對嗎?但只是知道這個似乎意義不大,學(xué)習(xí)講究舉一反三,知道這樣做的理由似乎更重要。

為什么鏈接被自動轉(zhuǎn)換

禁用的方法很簡單,但我喜歡弄清來龍去脈。先說一下為什么鏈接會被自動轉(zhuǎn)換。

WordPress加載過程中會include一個叫做default-filters.php的文件,位于wp-includes/目錄下,該文件包含WordPress默認(rèn)添加的actions和filters,看一下這個文件,滿眼的add_action或者add_filter。

在評論表單中,用 comment_text() 函數(shù)輸出用戶的評論,comment_text()函數(shù)提供了一個filter叫做comment_text,在comment_text()函數(shù)返回評論結(jié)果前過濾結(jié)果。WordPress默認(rèn)向這個filter添加了哪些函數(shù)?打開default-filters.php看一下,發(fā)現(xiàn)添加了如下功能:

//將Wordpress更正為WordPress
add_filter( 'comment_text', 'capital_P_dangit', 31 );
//格式化特殊符號
add_filter( 'comment_text', 'wptexturize' );
//轉(zhuǎn)換符號,例如將<br>變成<br />
add_filter( 'comment_text', 'convert_chars' );
//將url自動變成可點擊的鏈接,我們要找的東西
add_filter( 'comment_text', 'make_clickable',  9 );
//如其名字所說,將不完整的標(biāo)簽補全
add_filter( 'comment_text', 'force_balance_tags', 25 );
//將符號轉(zhuǎn)換為表情
add_filter( 'comment_text', 'convert_smilies', 20 );
//自動添加<p>和<br />標(biāo)簽
add_filter( 'comment_text', 'wpautop',  30 );

WordPress將評論存入數(shù)據(jù)庫時,是原封不動的存入的,例如用戶輸入

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

數(shù)據(jù)庫存入的內(nèi)容和上面相同,標(biāo)簽結(jié)構(gòu)是不完整的,當(dāng)程序調(diào)用comment_text()函數(shù)輸出評論內(nèi)容時,數(shù)據(jù)需要被上面提到的7個函數(shù)過濾一遍,當(dāng)被force_balance_tags()處理時,就會將標(biāo)簽補全,于是輸出的結(jié)果是

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

既然WordPress用add_filter添加了make_clickable功能,我們只需要用于其相反的remove_filter移除這個功能就可以了,于是就有了開頭的解決方案。

remove_filter中的9代表什么?

添加filter時,9代表優(yōu)先級,規(guī)定了所有添加到某個hook的函數(shù)的執(zhí)行順序,移除的時候也一樣。想象一下add_filter會讓一個函數(shù)進(jìn)入隊列排隊,數(shù)字越大的排的越靠后,即執(zhí)行越晚。當(dāng)我們需要移除某個函數(shù)時,必須保證移除功能在添加功能之后執(zhí)行,在該函數(shù)還沒有添加的時候移除它,沒有任何意義。

make_clickable函數(shù)位于wp-includes/formatting.php中,不僅將鏈接變成可點擊的,而且會自動添加rel=”nofollow”屬性,如果你希望跟隨某些鏈接,可以先移除默認(rèn)的功能,然后寫一個自己的功能加進(jìn)去。

舉一反三

這種remove_filter和add_filter的把戲可以用到很多地方,比如很多插件會用wp_enqueue_script和wp_enqueue_style添加自己的腳本和樣式表,如果插件把腳本放到head中,可能會拖慢網(wǎng)頁加載速度;有的插件自帶的樣式表只有幾句話,單獨存放成一個文件完全沒必要,這些行為都會讓你的head標(biāo)簽內(nèi)容變長,對SEO也是有害的。你想制止這種行為,怎么辦?

用上面提到的先remove再add的思想,只不過這次我們調(diào)用的是另外兩對函數(shù):

  • wp_dequeue_style
  • wp_enqueue_style
  • wp_dequeue_script
  • wp_enqueue_script

例如,想將WP-PageNavi插件的樣式表移除,將樣式合并到主題的style.css中,可以在functions.php中如是說

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

這樣WP-PageNavi的樣式表link就從head中消失了。

再舉個移動腳本的例子,wp-codebox插件默認(rèn)將腳本codebox.js放在head中,我希望將其挪到</body>標(biāo)簽之前,在主題的functions.php中寫如下代碼

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函數(shù)最后一個參數(shù)設(shè)置為true,即表示在footer引入腳本。

通過這種方法,可以達(dá)到優(yōu)化網(wǎng)站結(jié)構(gòu)的目的,最佳模式是:

  • 樣式表在head中引入
  • 腳本在</body>標(biāo)簽前引入
  • 引入的樣式表和腳本越少越好,這樣可以減少http請求次數(shù),方法是將所有腳本合并,所有樣式表合并,當(dāng)然這樣會令使用便利性打折扣,平衡在哪里要根據(jù)自己的具體情況來。
  • 異步請求的追蹤腳本,例如google分析腳本,推薦加載head中。

結(jié)語

從禁止評論自動轉(zhuǎn)換URL為可點擊的鏈接找到了根源,了解了如何知曉WordPress默認(rèn)添加了哪些filter函數(shù)(翻閱default-filters.php),知道WordPress有哪些格式化函數(shù)(查看formatting.php)。

通過舉一反三,聯(lián)想到一種WordPress中優(yōu)化網(wǎng)站HTML結(jié)構(gòu)、提升網(wǎng)頁加載速度的方法,這就是了解來龍去脈的好處。

參考自:http://www.solagirl.net/how-to-disable-comment-make-clickable-function.html

聲明:本站所有文章,如無特殊說明或標(biāo)注,均為本站原創(chuàng)發(fā)布。任何個人或組織,在未征得本站同意時,禁止復(fù)制、盜用、采集、發(fā)布本站內(nèi)容到任何網(wǎng)站、書籍等各類媒體平臺。如若本站內(nèi)容侵犯了原著者的合法權(quán)益,可聯(lián)系我們進(jìn)行處理。

給TA打賞
共{{data.count}}人
人已打賞
歡迎關(guān)注WordPress大學(xué)公眾號 WPDAXUE
基礎(chǔ)教程

WordPress 使用聯(lián)圖網(wǎng) API 生成二維碼(緩存和 Logo)

2014-4-9 9:09:42

基礎(chǔ)教程

為你的 WordPress 站點添加”歷史上的今天”功能

2014-4-15 8:58:09

10 條回復(fù) A文章作者 M管理員
  1. 能設(shè)置某一頁面不啟用嗎?

  2. 撒哈拉的小貓

    我博客的評論直接把所有HTML標(biāo)簽過濾了

  3. 很強大,漲姿勢了

  4. 有用,感謝分享。收藏備轉(zhuǎn)。

  5. 這個功能不錯。挺實用的。

  6. 多說的話,可以直接設(shè)置不解析評論網(wǎng)址

  7. 三好公民

    謝謝倡萌對文章的補充,本來我的原文只有文章開頭的“解決方案”那么一小豆腐塊,呵呵。
    本來我也是只知其然,而不知其所以然,當(dāng)時還納悶為何代碼中會有一個 9 。現(xiàn)在明白了為什么,而且了解了更多。
    我想,這就是倡萌創(chuàng)辦的WordPress大學(xué)的一個治學(xué)精神吧——讓你學(xué)得更多,讓你理解得更透徹更明白!

  8. 用多說的飄過

  9. 后面引申的部分很有用

?
個人中心
購物車
優(yōu)惠劵
今日簽到
有新私信 私信列表
搜索

景德镇市| 图木舒克市| 轮台县| 武冈市| 隆回县| 沅江市| 台中县| 黎川县| 大姚县| 深圳市| 喜德县| 元谋县| 灌阳县| 北海市| 平乐县| 界首市| 滕州市| 星子县| 五大连池市| 邵阳县| 马鞍山市| 民县| 临桂县| 临泉县| 邢台市| 宣恩县| 惠安县| 江山市| 克拉玛依市| 翼城县| 唐海县| 宕昌县| 大新县| 塔河县| 昭觉县| 西华县| 佳木斯市| 靖边县| 濮阳市| 义乌市| 澄江县|