掌握WordPress Hooks :自定義和增強(qiáng)網(wǎng)站的綜合指南

什么是 WordPress 鉤子?

WordPress 的“鉤子”讓你能在不改變核心代碼的情況下,靈活地增加或改變網(wǎng)站的功能。鉤子就像是一種特殊的接口,安裝在程序的關(guān)鍵位置,允許你插入自己的代碼或修改已有代碼。

圖片[1]-掌握WordPress Hooks :自定義和增強(qiáng)網(wǎng)站的綜合指南-光子波動網(wǎng) | 專業(yè)WordPress修復(fù)服務(wù),全球范圍,快速響應(yīng)

鉤子的目的

鉤子是一種工具,它讓你能夠在不修改 WordPress 核心代碼的情況下,自動執(zhí)行特定的函數(shù),從而添加或調(diào)整網(wǎng)站的功能。鉤子分為兩種類型:

  1. 動作鉤子:這類鉤子讓你在 WordPress 的某個特定時刻執(zhí)行代碼,比如添加數(shù)據(jù)或改變網(wǎng)站的工作方式。操作鉤子只執(zhí)行任務(wù),并不向用戶返回任何結(jié)果。
  2. 過濾器鉤子:這類鉤子在 WordPress 處理數(shù)據(jù)時,允許你修改這些數(shù)據(jù),并把修改后的數(shù)據(jù)返回給用戶。

動作鉤子用于“做事情”,比如添加新功能;過濾器鉤子用于“改變事情”,比如調(diào)整已有內(nèi)容的顯示方式。使用鉤子,你可以輕松地把自定義代碼,例如 JavaScript,整合到你的網(wǎng)站中,使其更加個性化。

圖片[2]-掌握WordPress Hooks :自定義和增強(qiáng)網(wǎng)站的綜合指南-光子波動網(wǎng) | 專業(yè)WordPress修復(fù)服務(wù),全球范圍,快速響應(yīng)

下面是將mytheme_script函數(shù)與wp_enqueue_scripts操作連接起來的操作掛鉤示例。

function mytheme_script() 
{wp_enqueue_script('my-custom-script', get_template_directory_uri() . '/js/custom-script.js', array(), '1.0.0', true);
}}
add_action( 'wp_enqueue_scripts', 'mytheme_script' );

用 WordPress 鉤子能讓你自定義和增強(qiáng)網(wǎng)站功能,這需要一點 HTML 和 PHP 的基礎(chǔ)知識。但不用擔(dān)心,即使是 WordPress 新手也能比較容易地學(xué)會如何創(chuàng)建和使用這些鉤子。

創(chuàng)建操作鉤子: 操作鉤子讓你可以在網(wǎng)站的特定時刻自動執(zhí)行代碼。要創(chuàng)建一個操作鉤子,你需要使用 add_action() 函數(shù)。這個函數(shù)通常被添加到你的主題的 functions.php 文件中。下面舉個例子來說明如何添加一個操作鉤子:

add_action( $target_hook, $the_name_of_function_you_want_to_use, $priority, $accepted_args );
圖片[3]-掌握WordPress Hooks :自定義和增強(qiáng)網(wǎng)站的綜合指南-光子波動網(wǎng) | 專業(yè)WordPress修復(fù)服務(wù),全球范圍,快速響應(yīng)
function my_custom_function($arg1) {
    // 在這里編寫你的功能代碼
    echo "Function with argument: " . $arg1;
}

// 掛接函數(shù)到 'wp_loaded' 鉤子,優(yōu)先級為 5(較早執(zhí)行),并接受一個參數(shù)
add_action('wp_loaded', 'my_custom_function', 5, 1);

my_custom_function 是我們定義的函數(shù),它會在 WordPress 完全加載后自動執(zhí)行。我們通過設(shè)置優(yōu)先級為 5 來讓它較早執(zhí)行,同時這個函數(shù)被設(shè)置為接收一個參數(shù)。這種方法可以讓你靈活地添加或修改網(wǎng)站的功能,而不需要改動核心代碼。

創(chuàng)建過濾器鉤子

在 WordPress 中,你可以使用 add_filter() 函數(shù)來創(chuàng)建過濾器鉤子。這類鉤子主要用于修改或過濾數(shù)據(jù),比如調(diào)整文本輸出或更改設(shè)置的值。

使用過濾器掛鉤時,你會指定一個已存在的值來進(jìn)行修改。這通常通過 apply_filters() 函數(shù)來完成,它在處理數(shù)據(jù)時調(diào)用你的自定義函數(shù),讓你可以修改或替換原始數(shù)據(jù)。

圖片[4]-掌握WordPress Hooks :自定義和增強(qiáng)網(wǎng)站的綜合指南-光子波動網(wǎng) | 專業(yè)WordPress修復(fù)服務(wù),全球范圍,快速響應(yīng)

下面是一個添加到 WordPress 主題(比如 Twenty Twenty-Three 主題)的 functions.php 文件中的過濾器掛鉤示例:

function modify_excerpt_length($length) {
    return 20;
}
// 使用 add_filter 函數(shù)將 'modify_excerpt_length' 函數(shù)掛接到 'excerpt_length' 鉤子上
add_filter('excerpt_length', 'modify_excerpt_length');

在這個例子中,modify_excerpt_length 函數(shù)用來修改 WordPress 文章摘要的默認(rèn)長度。我們通過 add_filter() 函數(shù)將這個自定義函數(shù)掛接到 excerpt_length 鉤子上,這個鉤子控制摘要的長度。當(dāng) WordPress 請求摘要長度時,它會使用你指定的新值(這里是 20 個字),從而替換原來的默認(rèn)設(shè)置。

如果你發(fā)現(xiàn)自己需要取消或禁用之前通過 add_action()add_filter() 添加的操作和過濾器,你可以使用 remove_action()remove_filter() 函數(shù)來實現(xiàn)。下面是如何在 WordPress 中使用 remove_action() 的一個示例:

remove_action('example_action', 'example_function', 10);

在這個示例中,example_action 是之前添加的一個操作鉤子,example_function 是掛接到這個鉤子上的函數(shù),而 10 是添加這個操作時使用的優(yōu)先級。當(dāng)調(diào)用 remove_action() 時,你需要指定相同的鉤子名稱、函數(shù)名稱和優(yōu)先級,以確保正確取消。

下面看下remove_filter()的一個例子:

remove_filter( 'wp_mail', 'wp_staticize_emoji_for_email' );
add_filter( 'tiny_mce_plugins', 'disable_emojis_tinymce' );
}

示例顯示了如何停用wp_staticize_emoji_for_email,它將表情符號轉(zhuǎn)換為靜態(tài)圖像。然后它用disable_emojis_tinymce替換它們,這將停用WordPress中的表情符號功能。

你可以使用remove_filter()命令按順序禁用多個過濾器。這是一個例子:

function disable_emojis() {
remove_action( 'wp_head', 'print_emoji_detection_script', 7 );
remove_action( 'admin_print_scripts', 'print_emoji_detection_script' );
remove_action( 'wp_print_styles', 'print_emoji_styles' );
remove_action( 'admin_print_styles', 'print_emoji_styles' );
remove_filter( 'the_content_feed', 'wp_staticize_emoji' );
remove_filter( 'comment_text_rss', 'wp_staticize_emoji' );
remove_filter( 'wp_mail', 'wp_staticize_emoji_for_email' );
add_filter( 'tiny_mce_plugins', 'disable_emojis_tinymce' );
add_action( 'init', 'disable_emojis' );
}

上面的代碼旨在消除WordPress中的表情符號功能。它說明用戶可以在functions.php文件中嵌入多少個remove_filter命令沒有限制。

實用的 WordPress Hook 示例

這個鉤子的使用通常涉及到三個參數(shù):$size,$thumbnail_id$post。這里的 $size 是特色圖像顯示的尺寸,$thumbnail_id 是特色圖像的ID,而 $post 則是相關(guān)的帖子對象。

$size = apply_filters( 'admin_post_thumbnail_size', $size, $thumbnail_id, $post );

你可以根據(jù)需要更改$size參數(shù)。例如,如果要將縮略圖大小設(shè)置為 220 x 220 像素,使用以下代碼:

$size = apply_filters( 'admin_post_thumbnail_size', 220, $thumbnail_id, $post);

還可以通過添加array()函數(shù)來設(shè)置縮略圖的自定義大小。代碼如下所示:

$size = apply_filters( 'admin_post_thumbnail_size', array(220, 400), $thumbnail_id, $post);

上面的array ()函數(shù)設(shè)置縮略圖以 220 x 400 像素顯示。

密碼重置后

當(dāng)用戶重置密碼時,此操作掛鉤將被激活。該鉤子由兩個參數(shù)組成:$user$new_pass,如下所示:

do_action( 'after_password_reset', $user, $new_pass );

例如,WordPress 將此鉤子與reset_password()函數(shù)結(jié)合使用。

定制加載組件

WordPress 的核心設(shè)計并不提倡直接修改或完全排除核心文件,如 wp-activate.php、wp-config-sample.phpwp-settings.php

圖片[5]-掌握WordPress Hooks :自定義和增強(qiáng)網(wǎng)站的綜合指南-光子波動網(wǎng) | 專業(yè)WordPress修復(fù)服務(wù),全球范圍,快速響應(yīng)

需要注意customize_loaded_components不能添加到主題中,因為它僅在plugins_loaded階段激活。

該鉤子由兩個參數(shù)組成:$components$this,如下所示:

$components = apply_filters( 'customize_loaded_components', array( 'widgets', 'nav_menus' ), $this );

$components參數(shù)是要加載的一批核心函數(shù),而$this指的是現(xiàn)有類中的對象。

可以自定義array()函數(shù)來確定要排除哪些組件。上面的示例顯示小部件和nav_menus被排除在核心進(jìn)程之外。

結(jié)論

鉤子的靈活性和強(qiáng)大功能使WordPress用戶能夠通過添加自定義功能或禁用特定進(jìn)程來完善其網(wǎng)站,而無需更改任何核心文件。這使得WordPress鉤子成為擴(kuò)展和個性化網(wǎng)站的理想選擇。

圖片[6]-掌握WordPress Hooks :自定義和增強(qiáng)網(wǎng)站的綜合指南-光子波動網(wǎng) | 專業(yè)WordPress修復(fù)服務(wù),全球范圍,快速響應(yīng)

聯(lián)系我們
教程看不懂?聯(lián)系我們?yōu)槟赓M(fèi)解答!免費(fèi)助力個人,小企站點!
客服微信
客服微信
電話:020-2206-9892
QQ咨詢:1025174874
郵件:info@361sale.com
工作時間:周一至周五,9:30-18:30,節(jié)假日休息
? 轉(zhuǎn)載聲明
本文作者:xiesong
THE END
喜歡就支持一下吧
點贊0 分享
評論 搶沙發(fā)

請登錄后發(fā)表評論

    暫無評論內(nèi)容