文本是《50個 WordPress 動作掛鉤(共7篇)》專題的第 5 篇。閱讀本文前,建議先閱讀前面的文章:
如果你是剛加入我們,我們正在介紹 WordPress 可用動作掛鉤中的 50 個,在上一篇文章中,我們介紹了 21-30 個,下面我們將繼續(xù)學習其他掛鉤。
如果你還沒有看過之前的文章,我建議返回去閱讀“概覽介紹”這篇文章,然后閱讀之后的文章,這樣你才能跟上我們的節(jié)奏。
閑言少敘,讓我們繼續(xù)吧!
控制默認的JavaScript代碼
WordPress在它的核心中提供了很多我們可以加載的腳本。wp_default_scriptsaction允許我們干預默認的JavaScript文件加載。
從WordPress站點中移除“jQuery Migrate”
如果你在使用jQuery,而且確認你的代碼對1.9以及更高版本的jQuery是兼容的,那么你就不需要jQuery Migrate插件來支持jQuery中被廢棄的代碼。這里有如何取消這個插件的例子:
<?php
add_action( 'wp_default_scripts', 'wp_default_scripts_example' );
function wp_default_scripts_example( &$scripts ) {
if ( ! is_admin() ) {
$scripts->remove( 'jquery' );
$scripts->add( 'jquery', false, array( 'jquery-core' ) );
}
}
// Example Source: http://aahacreative.com/2013/08/05/remove-jquery-migrate-wordpress-36/
?>
如果你在使用jQuery,而且確認你的代碼對1.9以及更高版本的jQuery是兼容的,那么你就不需要jQuery Migrate插件來支持jQuery中被廢棄的代碼。這里有如何取消這個插件的例子:
你的前端中的<head>標簽
這個動作(action)是在wp_head()函數(shù)中觸發(fā)的,因此你可以在你的前端代碼的<head>元素中插入一些內(nèi)容。
在你的站點中使用Open Graph
Open Graph是一個非常重要的協(xié)議,它用來幫助一些例如Facebook,Google和Twitter等大型網(wǎng)站來解析你的網(wǎng)頁。你可以定義特色圖片,標題,概述等等,如果你給這個協(xié)議提供了相關(guān)信息,這樣可以有助于那些網(wǎng)站來為你的網(wǎng)頁構(gòu)建結(jié)構(gòu)性、合理性的數(shù)據(jù)。
讓我們來看看如何使用這個協(xié)議并且把Open Graph相關(guān)的元數(shù)據(jù)插入到頁面的<head>元素中:
<?php
add_action( 'wp_head', 'wp_head_example' );
function wp_head_example() {
global $post;
// default image
$site_logo = get_stylesheet_directory_uri() . '/images/logo.png';
// homepage
if ( is_home() ) {
echo '<meta property="og:type" content="website" />';
echo '<meta property="og:url" content="' . get_bloginfo( 'url' ) . '" />';
echo '<meta property="og:title" content="' . esc_attr( get_bloginfo( 'name' ) ) . '" />';
echo '<meta property="og:image" content="' . $site_logo . '" />';
echo '<meta property="og:description" content="' . esc_attr( get_bloginfo( 'description' ) ) . '" />';
}
// single post or page
elseif ( is_singular() ) {
echo '<meta property="og:type" content="article" />';
echo '<meta property="og:url" content="' . get_permalink() . '" />';
echo '<meta property="og:title" content="' . esc_attr( get_the_title() ) . '" />';
if ( has_post_thumbnail( $post->ID ) ) {
$image = wp_get_attachment_image_src( get_post_thumbnail_id( $post->ID ), 'large' );
echo '<meta property="og:image" content="' . esc_attr( $image[0] ) . '" />';
} else
echo '<meta property="og:image" content="' . $site_logo . '" />';
echo '<meta property="og:description" content="' . esc_attr( get_the_excerpt() ) . '" />';
}
}
// Example Source: http://wpdevsnippets.com/set-opengraph-meta-tags-fix-facebook-share/
?>
初始化主題
每當一個WordPress頁面加載了主題文件后,就會觸發(fā)after_setup_theme這個動作(action)。它將會在每次頁面請求時調(diào)用,你可以將和主題相關(guān)的函數(shù)掛載到這個動作(action)上。
設(shè)定特定主題下的WordPress特色
這里有幾種為主題啟用WordPress特色的方法,例如文章格式或者特色圖片,但是正確的方式應(yīng)該是為這些功能創(chuàng)建一個函數(shù),并且掛載這個函數(shù)到after_setup_theme動作(action)上。
<?php
add_action( 'after_setup_theme', 'after_setup_theme_example' );
function after_setup_theme_example() {
add_editor_style();
add_theme_support( 'post-formats', array( 'video', 'gallery' ) );
add_theme_support( 'post-thumbnails' );
}
?>
看到了吧,現(xiàn)在我們的主題可以使用特色圖片,我們發(fā)表視頻或者畫廊,并且我們的“可視化編輯器”可以擁有自己的樣式文件使得更像前端。
在多媒體列表中添加自定義列
manage_media_custom_column這個動作(action)幫助我們添加自定義列到多媒體庫中的已上傳文件列表中。
在一個列中顯示每個上傳文件的ID
我真的很討厭查找特色圖片ID這個過程——需要從中一個文章的畫廊中排除。幸運地是,我找到了這段代碼可以在多媒體庫中的已上傳文件列表中顯示出ID:
<?php
add_filter( 'manage_media_columns', 'manage_media_columns_example' );
add_action( 'manage_media_custom_column', 'manage_media_custom_column_example', 10, 2 );
function manage_media_columns_example( $columns ) {
$columns[ 'wps_post_attachments_id' ] = __( 'ID', 'theme-name' );
return $columns;
}
function manage_media_custom_column_example( $column_name, $attachment_id ){
if ( 'wps_post_attachments_id' === $column_name ) {
echo $attachment_id;
}
}
// Example Source: http://wpsnipp.com/index.php/functions-php/media-library-admin-columns-with-attachment-id/
?>
希望你喜歡它!
評論狀態(tài)的變化
每當一個評論的狀態(tài)發(fā)生變化(批準、駁回、垃圾、或者放入回收站),一個名為transition_comment_status的動作就會被觸發(fā)。之后,另一個帶參數(shù)的動作將會被調(diào)用:comment_(old_status)_to_(new_status)。讓我們看一下第二個動作的工作原理吧。
當評論被批準后給評論者發(fā)送郵件
假如你希望評論在被批準之后才能發(fā)表,但是你也需要在評論被發(fā)表后通知你的訪問者。你可以把下面的代碼作為一個插件實現(xiàn)郵件通知他們這個消息:
<?php
add_action( 'comment_unapproved_to_approved', 'comment_unapproved_to_approved_example' );
function comment_unapproved_to_approved_example( $comment ) {
$commenter_email = $comment->comment_author_email;
$commenter_name = $comment->comment_author;
$post_url = get_comment_link( $comment );
$subject = "Your comment is up!";
$message = "Hello $commenter_name,\n\nYour comment has been approved!You can view it below:\n\n$post_url\n\nThank you for sharing your ideas with us!";
wp_mail( $commenter_email, $subject, $message );
}
?>
現(xiàn)在當他們的評論被批準后評論者會被通知。他們可能從郵件里打開你的文章以查看評論內(nèi)容,并且還可能閱讀其他內(nèi)容。這個非常好的(簡單的)方法可以獲得回頭客!
處理頁面模板的加載
WordPress使用我們稱之為“頁面模板”來顯示不同類型的頁面,例如:一篇文章頁面,首頁,一個404錯誤頁面,搜索結(jié)果顯示頁面,歸檔頁面等等。template_redirect這個動作會在WordPress決定使用哪個模板時被觸發(fā)。
當只有一個搜索結(jié)果時重定向到文章的地址
想要節(jié)省你的訪問者的一次點擊?下面的代碼會讓你通過一個特別的方法來實現(xiàn):如果搜索結(jié)果只有一篇文章的話就直接給用戶顯示那篇文章頁面而不是原來的搜索結(jié)果。
如果你要問我的話,這確實是個小把戲:
<?php
add_action( 'template_redirect', 'template_redirect_example' );
function template_redirect_example() {
if ( is_search() ) {
global $wp_query;
if ( 1 == $wp_query->post_count && 1 == $wp_query->max_num_pages ) {
wp_redirect( get_permalink( $wp_query->posts['0']->ID ) );
exit;
}
}
}
// Example Source: http://www.elegantthemes.com/blog/tips-tricks/eight-useful-code-snippets-for-wordpress
?>
現(xiàn)在,如果有人搜索“guacamole”這個關(guān)鍵字,而且只有一篇文章提到了guacamole,訪問者將會自動地重定向到這篇文章。
很酷,是吧?
處理WordPress的訂閱(Feeds)
訂閱是WordPress最古老的一個特色,而且還一直在使用著。通過do_feed(或者其他相關(guān)的動作)你可以控制訂閱是被如何處理的。
移除WordPress所有的訂閱
移除訂閱鏈接使得對大多數(shù)人是不可用的,但是如果一個訪問者知道你使用的是WordPress并且知道WordPress的訂閱機制,他們可以試著在你的網(wǎng)址后面添加/feed/并且搜索訂閱信息。怎么樣才能真正地禁止訂閱呢?下面的代碼片段將會幫助你徹底禁止訂閱:
<?php
add_action( 'do_feed', 'do_feed_example', 1 );
add_action( 'do_feed_atom', 'do_feed_example', 1 );
add_action( 'do_feed_rdf', 'do_feed_example', 1 );
add_action( 'do_feed_rss2', 'do_feed_example', 1 );
add_action( 'do_feed_rss', 'do_feed_example', 1 );
function do_feed_example() {
wp_die( __( '<h1>Feed not available, please visit our <a href="' . get_bloginfo( 'url' ) . '">Home Page</a>!</h1>' ) );
}
// Example Source: http://wpdevsnippets.com/disable-rss-feed/
?>
很簡單,對嗎?
修改工具欄
工具欄(更正式的應(yīng)該叫做管理員工具欄)是在3.1版本的WordPress中被引入的,而且這一點受到的褒貶不一——有人希望能徹底移除它,另一些人卻無法離開它。不管怎么樣,admin_bar_menu這個動作是往工具欄中添加子項目的主要鉤子函數(shù)。
總是對所有用戶顯示工具欄
如果不會對你的網(wǎng)站設(shè)計風格造成很壞的影響的話工具欄可能是遲早都會有用處的——你可以使用內(nèi)建的搜索框,并且增加例如登錄或者聯(lián)系鏈接的子菜單。
下面的代碼演示了不管用戶是否已經(jīng)登錄都會顯示工具欄:
<?php
add_action( 'admin_bar_menu', 'admin_bar_menu_example' );
add_filter( 'show_admin_bar', '__return_true' , 1000 );
function admin_bar_menu_example( $wp_admin_bar ) {
if ( ! is_user_logged_in() ) {
$wp_admin_bar->add_menu( array( 'title' => __( 'Log In' ), 'href' => wp_login_url() ) );
$wp_admin_bar->add_menu( array( 'title' => __( 'Contact' ), 'href' => 'http://www.mywebsite.com/contact/' ) );
}
}
// Example source: http://blog.ftwr.co.uk/archives/2011/01/05/always-show-admin-bar/
?>
看到了吧,是不是很簡單?現(xiàn)在你的訪問者可以在默認的搜索框旁邊看到“登錄”和“聯(lián)系”鏈接。
控制默認的“分類”小工具
你可以使用wp_list_categories()函數(shù)顯示分類列表。而且這個動作(和函數(shù)同名)可以幫助我們自定義輸出內(nèi)容。
移除分類鏈接的標題屬性
如果你不需要在小組件中顯示分類鏈接的標題屬性,你可以在你的工程中使用下面的代碼移除它們:
<?php
add_action( 'wp_list_categories', 'wp_list_categories_example' );
function wp_list_categories_example() {
return preg_replace( '` title="(.+)"`', '', $output );
}
// Example Source: http://wpsnipp.com/index.php/cat/remove-title-attribute-from-wp_list_categories/
?>
在搜索觸發(fā)之前處理搜索表單
為了使用內(nèi)建的搜索特性,你需要使用get_search_form()函數(shù)。如果你希望在這個函數(shù)輸出前顯示一些內(nèi)容的話,你可以使用pre_get_search_form()這個函數(shù)。
在搜索表單之前添加信息
如果說你有一個數(shù)以百計或者數(shù)以千計的訪問量的商業(yè)博客。為了通知你的訪問者他們可以輸入條形碼來獲得他們想要的產(chǎn)品,你可以使用下面的代碼來在搜索框前添加這些信息。
<?php
add_action( 'pre_get_search_form', 'pre_get_search_form_example' );
function pre_get_search_form_example( $form ) {
echo '<div class="search-info">Enter your barcode number below to access the item you want.</div>';
}
?>
注意,你可以使用例子中的template_redirect動作來實現(xiàn)當訪問者輸入一個條形碼之后自動地跳轉(zhuǎn)到產(chǎn)品展示頁面。
小結(jié)
我們已經(jīng)完成了50個動作介紹的第四部分。我希望你能喜歡并且從中學到了新的知識。練習一下你看到的內(nèi)容,我們在下一篇文章中再見。
同時我也想要聽到你的想法。在下面寫下你對這些動作的的想法。如果你喜歡這篇文章,別忘了分享它!
原文出自:http://code.tutsplus.com/tutorials/fifty-actions-of-wordpress-50-examples-31-to-40–cms-21581
由 surenpi.com@wordpress大學 原創(chuàng)翻譯,未經(jīng)允許,禁止轉(zhuǎn)載和采用本譯文。
您已閱讀完《50個 WordPress 動作掛鉤(共7篇)》專題的第 5 篇。請繼續(xù)閱讀該專題下面的文章:





