掌握WordPress Hooks :自定义和增强网站的综合指南

什么是 WordPress 钩子?

WordPress 的“钩子”让你能在不改变核心代码的情况下,灵活地增加或改变网站的功能。钩子就像是一种特殊的接口,安装在程序的关键位置,允许你插入自己的代码或修改已有代码。

掌握WordPress Hooks :自定义和增强网站的综合指南

钩子的目的

钩子是一种工具,它让你能够在不修改 WordPress 核心代码的情况下,自动执行特定的函数,从而添加或调整网站的功能。钩子分为两种类型:

  1. 动作钩子:这类钩子让你在 WordPress 的某个特定时刻执行代码,比如添加数据或改变网站的工作方式。操作钩子只执行任务,并不向用户返回任何结果。
  2. 过滤器钩子:这类钩子在 WordPress 处理数据时,允许你修改这些数据,并把修改后的数据返回给用户。

动作钩子用于“做事情”,比如添加新功能;过滤器钩子用于“改变事情”,比如调整已有内容的显示方式。使用钩子,你可以轻松地把自定义代码,例如 JavaScript,整合到你的网站中,使其更加个性化。

掌握WordPress Hooks :自定义和增强网站的综合指南

下面是将mytheme_script函数与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 钩子能让你自定义和增强网站功能,这需要一点 HTML 和 PHP 的基础知识。但不用担心,即使是 WordPress 新手也能比较容易地学会如何创建和使用这些钩子。

创建操作钩子: 操作钩子让你可以在网站的特定时刻自动执行代码。要创建一个操作钩子,你需要使用 add_action() 函数。这个函数通常被添加到你的主题的 functions.php 文件中。下面举个例子来说明如何添加一个操作钩子:

add_action( $target_hook, $the_name_of_function_you_want_to_use, $priority, $accepted_args );
掌握WordPress Hooks :自定义和增强网站的综合指南
function my_custom_function($arg1) {
    // 在这里编写你的功能代码
    echo "Function with argument: " . $arg1;
}

// 挂接函数到 'wp_loaded' 钩子,优先级为 5(较早执行),并接受一个参数
add_action('wp_loaded', 'my_custom_function', 5, 1);

my_custom_function 是我们定义的函数,它会在 WordPress 完全加载后自动执行。我们通过设置优先级为 5 来让它较早执行,同时这个函数被设置为接收一个参数。这种方法可以让你灵活地添加或修改网站的功能,而不需要改动核心代码。

创建过滤器钩子

在 WordPress 中,你可以使用 add_filter() 函数来创建过滤器钩子。这类钩子主要用于修改或过滤数据,比如调整文本输出或更改设置的值。

使用过滤器挂钩时,你会指定一个已存在的值来进行修改。这通常通过 apply_filters() 函数来完成,它在处理数据时调用你的自定义函数,让你可以修改或替换原始数据。

掌握WordPress Hooks :自定义和增强网站的综合指南

下面是一个添加到 WordPress 主题(比如 Twenty Twenty-Three 主题)的 functions.php 文件中的过滤器挂钩示例:

function modify_excerpt_length($length) {
    return 20;
}
// 使用 add_filter 函数将 'modify_excerpt_length' 函数挂接到 'excerpt_length' 钩子上
add_filter('excerpt_length', 'modify_excerpt_length');

在这个例子中,modify_excerpt_length 函数用来修改 WordPress 文章摘要的默认长度。我们通过 add_filter() 函数将这个自定义函数挂接到 excerpt_length 钩子上,这个钩子控制摘要的长度。当 WordPress 请求摘要长度时,它会使用你指定的新值(这里是 20 个字),从而替换原来的默认设置。

如果你发现自己需要取消或禁用之前通过 add_action()add_filter() 添加的操作和过滤器,你可以使用 remove_action()remove_filter() 函数来实现。下面是如何在 WordPress 中使用 remove_action() 的一个示例:

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

在这个示例中,example_action 是之前添加的一个操作钩子,example_function 是挂接到这个钩子上的函数,而 10 是添加这个操作时使用的优先级。当调用 remove_action() 时,你需要指定相同的钩子名称、函数名称和优先级,以确保正确取消。

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

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

示例显示了如何停用wp_staticize_emoji_for_email,它将表情符号转换为静态图像。然后它用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 示例

这个钩子的使用通常涉及到三个参数:$size$thumbnail_id$post。这里的 $size 是特色图像显示的尺寸,$thumbnail_id 是特色图像的ID,而 $post 则是相关的帖子对象。

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

你可以根据需要更改$size参数。例如,如果要将缩略图大小设置为 220 x 220 像素,使用以下代码:

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

还可以通过添加array()函数来设置缩略图的自定义大小。代码如下所示:

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

上面的array ()函数设置缩略图以 220 x 400 像素显示。

密码重置后

当用户重置密码时,此操作挂钩将被激活。该钩子由两个参数组成:$user$new_pass,如下所示:

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

例如,WordPress 将此钩子与reset_password()函数结合使用。

定制加载组件

WordPress 的核心设计并不提倡直接修改或完全排除核心文件,如 wp-activate.phpwp-config-sample.phpwp-settings.php

掌握WordPress Hooks :自定义和增强网站的综合指南

需要注意customize_loaded_components不能添加到主题中,因为它仅在plugins_loaded阶段激活。

该钩子由两个参数组成:$components$this,如下所示:

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

$components参数是要加载的一批核心函数,而$this指的是现有类中的对象。

可以自定义array()函数来确定要排除哪些组件。上面的示例显示小部件和nav_menus被排除在核心进程之外。

结论

钩子的灵活性和强大功能使WordPress用户能够通过添加自定义功能或禁用特定进程来完善其网站,而无需更改任何核心文件。这使得WordPress钩子成为扩展和个性化网站的理想选择。

掌握WordPress Hooks :自定义和增强网站的综合指南

联系我们
文章看不懂?联系我们为您免费解答!免费助力个人,小企站点!
电话:020-2206-9892
QQ咨询:1025174874
邮件:info@361sale.com
工作时间:周一至周五,9:30-18:30,节假日休息
发布者:光子波动,转转请注明出处:https://www.361sale.com/7813/

(1)
上一篇 2024年 4月 13日 下午2:10
下一篇 2024年 4月 14日 下午2:25

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

联系我们

020-2206-9892

QQ咨询:1025174874

邮件:info@361sale.com

工作时间:周一至周五,9:30-18:30,节假日休息

客服微信
购买我们的托管服务器,享受免费运维!