文本是《50個(gè) WordPress 動(dòng)作掛鉤(共7篇)》專題的第 2 篇。閱讀本文前,建議先閱讀前面的文章:
在該系列的上一部分,我們已經(jīng)對(duì) WordPress 動(dòng)作掛鉤做了一個(gè)簡(jiǎn)單的介紹,在這個(gè)教程中,我們將開(kāi)始介紹所選的 50 個(gè)動(dòng)作掛鉤,以及通過(guò)例子說(shuō)明它們的用途。
事不宜遲,我們現(xiàn)在就開(kāi)始介紹前10個(gè)動(dòng)作掛鉤!
處理 WordPress 初始化
這個(gè)動(dòng)作掛鉤 init,簡(jiǎn)而言之,就是在初始化之后開(kāi)始調(diào)用的,這就是為什么這個(gè)掛鉤可能是有史以來(lái)最流行的 WordPress 動(dòng)作掛鉤 —— 因?yàn)槟憧梢話燧d幾乎任何東西。
更改部分默認(rèn)的重寫(xiě)規(guī)則
作為一個(gè)土耳其 WordPress 用戶,我覺(jué)得很奇怪(和令人沮喪),WordPress 不允許我們?cè)诠芾砗笈_(tái)更改這些頁(yè)面的URL前綴:作者頁(yè)面、搜索結(jié)果或分頁(yè)存檔頁(yè)。
但是,通過(guò)下面的代碼,就可以幫助我解決以上問(wèn)題:
<?php
add_action( 'init', 'init_example' );
function init_example() {
global $wp_rewrite;
$wp_rewrite->author_base = 'profile';
$wp_rewrite->search_base = 'find';
$wp_rewrite->pagination_base = 'p';
}
?>
很酷吧? (當(dāng)然,我用 ‘profile’、 ‘find’ 和 ‘p’ 替換了土耳其單詞。)
發(fā)送 HTTP 頭
這個(gè)不需要多做解釋,它自身的名字已經(jīng)說(shuō)明了:這個(gè)方便的小掛鉤允許我們?cè)O(shè)置要發(fā)送的 HTTP 頭!
讓 IE 使用最新的渲染引擎
X-UA-Compatible Meta標(biāo)簽允許設(shè)置IE使用特定的渲染引擎來(lái)打開(kāi)網(wǎng)頁(yè),如果你設(shè)置為 “edge”,IE 將使用最新的渲染引擎,然而,如果使用 Google Chrome 框架,將可能無(wú)法通過(guò) HTML 驗(yàn)證。
幸運(yùn)的是,我們可以不局限于 <meta> 標(biāo)簽的用法,我們也可以使用 HTTP 頭。而 send_headers 掛鉤就可以做到:
<?php
add_action( 'send_headers', 'send_headers_example' );
function send_headers_example() {
header( 'X-UA-Compatible: IE=edge,chrome=1' );
}
// Example Source: http://codex.wordpress.org/Plugin_API/Action_Reference/send_headers
?>
切換主題
如果你想切換主題后運(yùn)行某些函數(shù),你可以使用 after_switch_theme 掛鉤。
在切換主題后刷新重寫(xiě)規(guī)則
舉個(gè)簡(jiǎn)單的例子:如果你的新主題使用了自定義文章類(lèi)型,你切換到這個(gè)新主題后,怎樣刷新重寫(xiě)規(guī)則?
好吧,下面的代碼就可以實(shí)現(xiàn):
<?php
add_action( 'after_switch_theme', 'after_switch_theme_example' );
function after_switch_theme_example() {
flush_rewrite_rules();
}
// Example Source: https://codex.wordpress.org/Function_Reference/flush_rewrite_rules
?>
很容易,對(duì)吧?
出于某種原因,我沒(méi)辦法讓 flush_rewrite_rules() 這個(gè)函數(shù),在掛載到 after_switch_theme 掛鉤以后可以正常工作,如果你知道為什么,請(qǐng)?jiān)谠u(píng)論中告訴我們,謝謝。
添加自定義列到文章列表
這個(gè)掛鉤允許我們?cè)诠芾砗笈_(tái)的“所有文章”的文章列表中添加額外的列。
在列中顯示文章的附件數(shù)
假設(shè)你要了解每篇文章的附件數(shù),因?yàn)椋热缯f(shuō),你要確認(rèn)每篇文章使用10個(gè)圖片作為圖冊(cè)顯示,與其在媒體庫(kù)中一個(gè)個(gè)數(shù),但不如直接在文章列表中統(tǒng)計(jì)出來(lái):
<?php
add_filter( 'manage_posts_columns', 'manage_posts_columns_example', 5 );
add_action( 'manage_posts_custom_column', 'manage_posts_custom_column_example', 5, 2 );
function manage_posts_columns_example( $columns ) {
$columns['post_attachments'] = __( 'Attached', 'theme-name' );
return $columns;
}
function manage_posts_custom_column_example( $column_name, $post_id ) {
if( 'post_attachments' == $column_name ) {
$attachments = get_children( array( 'post_parent' => $post_id ) );
$count = count( $attachments );
if( $count != 0 ) {
echo $count;
}
}
}
// Example Source: http://wpsnipp.com/index.php/functions-php/display-post-attachment-count-in-admin-column/
?>
當(dāng)然,這是一個(gè)非常特殊的情況下的一個(gè)例子。但請(qǐng)記住,你在 tutsplus 看到的代碼 – 你永遠(yuǎn)不知道什么時(shí)候你會(huì)需要它!
操作管理頁(yè)面的 <head>
時(shí)不時(shí)地,我們需要添加一些自定義東西到管理后臺(tái)頁(yè)面的 <head> 中,admin_head 這個(gè)掛鉤就可以做到!
在管理后臺(tái)顯示不同的 Favicon 圖標(biāo)
以下代碼演示了將一段自定義 Favicon 圖標(biāo)的HTML代碼嵌入到后臺(tái)頁(yè)面的<head>中:
<?php
add_action( 'admin_head', 'admin_head_example' );
function admin_head_example() {
echo '<link rel="shortcut icon" type="image/x-icon" href="' . get_bloginfo('template_directory') . '/images/admin-favicon.ico" />';
}
// Example Source: http://wpdevsnippets.com/wp-admin-custom-favicon/
?>
添加一個(gè) admin-favicon.ico 圖標(biāo)文件到你主題的 /images/ 目錄即可生效!
注入代碼到 wp_footer() 函數(shù)
wp_footer 掛鉤可以在 wp_footer() 函數(shù)運(yùn)行的地方調(diào)用其他函數(shù),你可以通過(guò)這個(gè)來(lái)定義函數(shù)的輸出。
為管理員顯示簡(jiǎn)要的性能報(bào)告
想要了解頁(yè)面加載時(shí)進(jìn)行了多少次查詢,使用了多少內(nèi)存?下面的代碼可以幫到你:
<?php
add_action( 'wp_footer', 'wp_footer_example' );
function wp_footer_example() {
$stat = sprintf( '%d queries in %.3f seconds, using %.2fMB memory',
get_num_queries(),
timer_stop( 0, 3 ),
memory_get_peak_usage() / 1024 / 1024
);
if( current_user_can( 'manage_options' ) ) {
echo "<!-- {$stat} -->";
}
}
// Example Source: http://wordpress.stackexchange.com/a/1866
?>
現(xiàn)在你可以在網(wǎng)頁(yè)源代碼中看到一個(gè)注釋來(lái)顯示頁(yè)面的查詢和內(nèi)存使用信息,不用擔(dān)心:非管理員是看不到這些信息的。
處理前端腳本隊(duì)列
如果你正在折騰主題,這個(gè)掛鉤是你必須要了解的: wp_enqueue_scripts 掛鉤,用來(lái)處理前端的JS和CSS腳本隊(duì)列輸出。
wp_enqueue_script() 函數(shù)的正確用法
有很多種方法可以在前端加載js和css,但是通過(guò)下面的方法才是唯一正確的:
<?php
add_action( 'wp_enqueue_scripts', 'wp_enqueue_scripts_example' );
function wp_enqueue_scripts_example() {
// you can enqueue scripts...
wp_enqueue_script( 'my-script', get_stylesheet_directory_uri() . '/scripts/my-script.js' );
// ...and styles, too!
wp_enqueue_style( 'my-style', get_stylesheet_directory_uri() . '/styles/my-style.css' );
}
?>
創(chuàng)建管理后臺(tái)通知
admin_notices 掛鉤是用來(lái)在管理后臺(tái)的頭部顯示所有 警告、錯(cuò)誤和其他信息的,你也可以用來(lái)顯示自己的信息。
提示已登錄的用戶網(wǎng)站正在維護(hù)
如果你正在遷移服務(wù)器,你需要提示你的作者不要在這個(gè)維護(hù)時(shí)間內(nèi)發(fā)布任何內(nèi)容,你可以對(duì)所有非管理員鎖定后臺(tái)頁(yè)面,也可以使用下面的代碼顯示一個(gè)提示信息:
<?php
add_action( 'admin_notices', 'admin_notices_example' );
function admin_notices_example() {
echo '<div class="error">
<p>We are performing website maintenance. Please don\'t make any changes in your posts until further notice!</p>
</div>';
}
// Example Source: http://wpsnippy.com/show-notification-message-wordpress-admin-pages/
?>
在這里,我們使用了 “error” 類(lèi),如果你要顯示一個(gè)綠色框(意味著更像一個(gè)”成功“信息),你可以使用 “updated” 類(lèi)。
處理小工具的初始化
WordPress 的小工具是一個(gè)優(yōu)秀的系統(tǒng),它允許我們開(kāi)發(fā)人員創(chuàng)建和編輯我們網(wǎng)站的某些部分。使用 widgets_init 掛鉤可以讓我們進(jìn)行一些修改小工具的行為。
禁止加載默認(rèn)的小工具
出于某些原因,你可能需要禁用 WordPress 默認(rèn)的小工具,下面的代碼可以幫助你移除它們:
<?php
add_action( 'widgets_init', 'widgets_init_example' );
function widgets_init_example() {
unregister_widget( 'WP_Widget_Pages' );
unregister_widget( 'WP_Widget_Calendar' );
unregister_widget( 'WP_Widget_Archives' );
unregister_widget( 'WP_Widget_Links' );
unregister_widget( 'WP_Widget_Meta' );
unregister_widget( 'WP_Widget_Search' );
unregister_widget( 'WP_Widget_Text' );
unregister_widget( 'WP_Widget_Categories' );
unregister_widget( 'WP_Widget_Recent_Posts' );
unregister_widget( 'WP_Widget_Recent_Comments' );
unregister_widget( 'WP_Widget_RSS' );
unregister_widget( 'WP_Widget_Tag_Cloud' );
}
?>
當(dāng)然,你可以注銷(xiāo)上面的某些行,可以讓某些默認(rèn)小工具繼續(xù)可用。
刪除 WordPress 用戶
需要在刪除用戶的同時(shí)做些什么?你可以使用 delete_user 掛鉤。
刪除用戶時(shí)郵件通知他
如果你有一個(gè)網(wǎng)站,偶爾吸引了不好的人,你需要經(jīng)常刪除用戶,你可能要考慮讓他們知道他們的用戶帳戶將被刪除。下面的代碼片段可以幫助你:
<?php
add_action( 'delete_user', 'delete_user_example' );
function delete_user_example( $user_id ) {
global $wpdb;
$user_obj = get_userdata( $user_id );
$email = $user_obj->user_email;
$headers = 'From: ' . get_bloginfo( 'name' ) . ' <' . get_bloginfo( 'admin_email' ) . '>' . "\r\n";
$subject = 'You are being deleted, brah';
$message = 'Your account at ' . get_bloginfo( 'name' ) . ' has been deleted because of your totally uncool behaviors.';
wp_mail( $email, $subject, $message, $headers );
}
// Example Source: http://codex.wordpress.org/Plugin_API/Action_Reference/delete_user
?>
你可以修改 $subject 和 $message 的值來(lái)定義郵件通知的內(nèi)容。
今日小結(jié)
在這篇文章中,我們介紹了50個(gè)動(dòng)作掛鉤的10個(gè),希望你喜歡和從中學(xué)到新東西,下節(jié)課再見(jiàn)!
- 原文出自:http://code.tutsplus.com/tutorials/fifty-actions-of-wordpress-50-examples-1-to-10–cms-21578
- 由 稻草人@WordPress大學(xué) 原創(chuàng)翻譯,未經(jīng)允許,禁止轉(zhuǎn)載和采用本譯文。
您已閱讀完《50個(gè) WordPress 動(dòng)作掛鉤(共7篇)》專題的第 2 篇。請(qǐng)繼續(xù)閱讀該專題下面的文章:





不錯(cuò) ??
http頭怎么發(fā)送···