在設計WordPress主題時,在functions.php文件里添加一套通用的自定義函數將會大大提高開發效率,這樣就不必每次開發主題時都需先查找然后復制同樣的函數。這里記錄一些常用的函數,方便以后使用!
給頭部添加feed鏈接
WordPress2.8以后,都可以在頭部區域添加所有相關的feed鏈接(主體、評論、分類等),不過這并不是默認的,需要添加下面的代碼來運行:
// add feed links to header
if (function_exists(‘automatic_feed_links’)) {
automatic_feed_links();
} else {
return;
}
這段代碼先檢查是否使用可兼容的WordPress版本,然后再啟用自動geed鏈接。幾點注意事項:第一,此方法是假設沒有手動在頭部添加任何feed鏈接。第二,根據最近這個Trac ticket,似乎這個功能與add_theme_support已經整合在一起了。
自動包含jQuery
如何包含 jQuery ? 可以在主題的functions.php文件里添加下面的代碼:
// smart jquery inclusion
if (!is_admin()) {
wp_deregister_script(‘jquery’);
wp_register_script(‘jquery’,
(“http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js”), false);
wp_enqueue_script(‘jquery’);
}
這個代碼可以確保只包含一份jQuery,并從谷歌服務器上訪問它,節省帶寬同時訪問時還有緩存上的優勢。注意,這段代碼必需放在嵌套評論函數的前面才能正常運行。
啟用嵌套評論
一般來說,啟用嵌套評論需要在頭部區域添加一小段代碼到wp_head 標簽的前面。可以在functions.php文件里添加這段代碼:
// enable threaded comments
function enable_threaded_comments(){
if (!is_admin()) {
if (is_singular() AND comments_open() AND (get_option(‘thread_comments’) == 1))
wp_enqueue_script(‘comment-reply’);
}
}
add_action(‘get_header’, ‘enable_threaded_comments’);
這有助于保持
文件的整潔性,注意,這個函數需要放置在jQuery-inclusion函數的后面才能正常運作。刪除Head區域多余東西
WordPress
文件里含有大量的多余東西, 諸如,版本號、WLW、RSD和索引鏈接。為了清除這些不必要信息,可以在functions.php文件里添加下面的代碼:// remove junk from head
remove_action(‘wp_head’, ‘rsd_link’);
remove_action(‘wp_head’, ‘wp_generator’);
remove_action(‘wp_head’, ‘feed_links’, 2);
remove_action(‘wp_head’, ‘index_rel_link’);
remove_action(‘wp_head’, ‘wlwmanifest_link’);
remove_action(‘wp_head’, ‘feed_links_extra’, 3);
remove_action(‘wp_head’, ‘start_post_rel_link’, 10, 0);
remove_action(‘wp_head’, ‘parent_post_rel_link’, 10, 0);
remove_action(‘wp_head’, ‘adjacent_posts_rel_link’, 10, 0);
給頁腳添加谷歌分析工具
往functions.php 文件添加了下面的代碼,并從此不用為制作站點時都需要在footer.php文件添加谷歌分析工具的代碼頭疼了。
// add google analytics to footer
function add_google_analytics() {
echo ‘’;
echo ‘
echo ‘var pageTracker = _gat._getTracker(“UA-XXXXX-X”);’;
echo ‘pageTracker._trackPageview();’;
echo ‘’;
}
add_action(‘wp_footer’, ‘add_google_analytics’);
兩點注意事項:第一,用實際的 GA 代碼代替“UA-123456-1” ;第二,也可以查看當前谷歌分析工具的三種選擇并修改相應的代碼。目前,這個函數使用“ga.js”跟蹤代碼,也可以改用其他方法。
自定義摘要的長度
使用下面這個函數就可以給摘要指定任何長度而不用受默認的55字的限制。
// custom excerpt length
function custom_excerpt_length($length) {
return 20;
}
add_filter(‘excerpt_length’, ‘custom_excerpt_length’);
只需要將 “20” 替換為任何你需要的字數。
自定義摘要后 “繼續閱讀”字符串
不管你怎么稱呼這個方括號里的省略號[…]” ,總之這是WordPress默認的緊跟摘要 后面部分,我想刪除方括號,使用下面這段代碼你可以對它進行任何更改:
// custom excerpt ellipses for 2.9+
function custom_excerpt_more($more) {
return ‘…’;
}
add_filter(‘excerpt_more’, ‘custom_excerpt_more’);
/* custom excerpt ellipses for 2.8-
function custom_excerpt_more($excerpt) {
return str_replace(‘[…]‘, ‘…’, $excerpt);
}
add_filter(‘wp_trim_excerpt’, ‘custom_excerpt_more’);
*/
你可能已經注意到這里的代碼有兩個不同版本,看你使用的是WordPress什么版本。當然最好是使用最新版,因此這里注釋了更老版本的方法,不過要是你需要的話也可以使用它。不管是什么版本,使用此方法你僅僅需要用 “…” 或是任何你想要的符號來代替原來的“[…]”,即可。
“read more”?鏈接無法正常跳轉
WordPress里最讓人不可思議的就是當讀者在瀏覽一篇文章的模式下點擊“read more” 鏈接時,頁面就會跳轉到 “” 標簽的位置。如果是跳轉到同一頁面也就無所謂了,但是如果是重新加載一個新的頁面然后讀者發現沒有了下文也沒有任何解釋說哪里出錯了,這就很讓人覺得莫名其妙的。無論如何,這里有個非常漂亮的小函數可以阻止跳轉的發生:
// no more jumping for read more link
function no_more_jumping($post) {
return ‘ID).’”>’.'Continue Reading’.'’;
}
add_filter(‘excerpt_more’, ‘no_more_jumping’);
這段代碼無需其他任何東西就可以運行,從此你就可以不必為“跳轉”費心了。 注意,這也是自定義“read more”鏈接的好方法,你可以在此給它設定各種屬性或定義任何你想要文本。
給博客添加圖標
如果你想給博客添加個圖標,下面的代碼將會非常實用。創建完圖標后只要上傳圖片到網站的根目錄下即可。只要在functions.php文件的
區域添加下面的幾行代碼:// add a favicon to your
function blog_favicon() {
echo ‘’;
}
add_action(‘wp_head’, ‘blog_favicon’);
你可以隨意更改目錄,同時確保wp_head包含在你的主題 header.php文件里。
給博客后臺添加一個不同的圖標
有必要給WordPress后臺添加一個特別的圖標,這樣被收藏為書簽或是處理標簽時就更加容易認出。只要將圖標上傳到主題的/images/ 目錄下,加上下面的代碼即可:
// add a favicon for your admin
function admin_favicon() {
echo ‘
href=”‘.get_bloginfo(‘stylesheet_directory’).’/images/favicon.png” />’;
}
add_action(‘admin_head’, ‘admin_favicon’);
像前面一樣,同樣可以隨意更改目錄。不過最好將后臺圖標和前臺圖標分開放在不同的目錄下。
自定義后臺登陸圖標
是否想利用WordPress圖標在各個登陸頁面給自己做宣傳?那么,可以將這個WordPress圖標替換為其他自定義圖片,創建自定義登陸圖片,并將其命名為“custom-login-logo.png”將圖片上傳至主題的/images/ 目錄下,用下面的代碼:
// custom admin login logo
function custom_login_logo() {
echo ‘
h1 a { background-image:
url(‘.get_bloginfo(‘template_directory’).’/images/custom-login-logo.png) !important; }
’;
}
add_action(‘login_head’, ‘custom_login_logo’);
這里關鍵是要你設置路徑和圖片名稱一致。另外,在創建圖片的時候,記住圖片的屬性:寬為30px, 高為31px,透明GIF格式,頭部背景色#464646 。
禁用無用的小工具區域
Justin Tadlock介紹了個非常方便的函數,可用于刪除主題中不需要的小工具區域,這是自定義主題必不可少的一個函數:
// disable all widget areas
function disable_all_widgets($sidebars_widgets) {
//if (is_home())
$sidebars_widgets = array(false);
return $sidebars_widgets;
}
add_filter(‘sidebars_widgets’, ‘disable_all_widgets’);
這個代碼屬于即插即用型,不需要任何更改。注意:如果只想在主頁禁用小工具,那么就將第三欄的 “//”刪除。
刪除WordPress更新提示
我比較討厭WordPress更新提示,下面的代碼就可以將管理面板的更新提示刪除:
// kill the admin nag
if (!current_user_can(‘edit_users’)) {
add_action(‘init’, create_function(‘$a’, “remove_action(‘init’, ‘wp_version_check’);”), 2);
add_filter(‘pre_option_update_core’, create_function(‘$a’, “return null;”));
}
如果想要獲得更新通知的話,也可以將這段代碼注釋掉或是刪除掉。
在body_class 與 post_class中加入分類ID
默認情況下,WordPress body_class和 post_class并沒有包含當前文章的分類ID。 不過,可以用下面的代碼來實現:
// category id in body and post class
function category_id_class($classes) {
global $post;
foreach((get_the_category($post->ID)) as $category)
$classes [] = ‘cat-’ . $category->cat_ID . ‘-id’;
return $classes;
}
add_filter(‘post_class’, ‘category_id_class’);
add_filter(‘body_class’, ‘category_id_class’);
即使沒有使用分類ID,這個函數還是非常好使的,這也是為什么我將這個歸入自定義functions.php 模板的必備函數中來。
獲取第一個分類ID
當要處理多個不同分類時,另一個非常實用的函數獲取當前文章的第一個分類。代碼如下:
// get the first category id
function get_first_category_ID() {
$category = get_the_category();
return $category[0]->cat_ID;
}
嚴格的即插即播型: 只要在模板文件使用<?php get_first_category_ID(); ?>來訪問數據。