當(dāng)前位置:首頁(yè)>WordPress建站>WordPress開(kāi)發(fā)>介紹50個(gè) WordPress 動(dòng)作掛鉤(1-10)

介紹50個(gè) WordPress 動(dòng)作掛鉤(1-10)

文本是《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)!

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

給TA打賞
共{{data.count}}人
人已打賞
歡迎關(guān)注WordPress大學(xué)公眾號(hào) WPDAXUE
WordPress開(kāi)發(fā)

介紹50個(gè) WordPress 動(dòng)作掛鉤

2015-6-6 10:27:55

WordPress開(kāi)發(fā)

WordPress 微信登錄

2015-7-10 10:31:20

2 條回復(fù) A文章作者 M管理員
  1. 不錯(cuò) ??

  2. http頭怎么發(fā)送···

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

和龙市| 墨玉县| 济南市| 清涧县| 孙吴县| 萍乡市| 金沙县| 定兴县| 岳西县| 伊川县| 拜城县| 师宗县| 保德县| 海伦市| 通道| 紫云| 武冈市| 邵阳市| 溧水县| 深泽县| 磴口县| 阳曲县| 长子县| 北京市| 新绛县| 高碑店市| 山阳县| 仙居县| 繁峙县| 文昌市| 东平县| 通榆县| 江口县| 宣恩县| 象山县| 怀仁县| 郴州市| 长治市| 谷城县| 抚松县| 广宗县|