WordPress的 filter 和 action 有什么区别?

WordPress 中的 Filter 和 Action 是两种不同的钩子(Hook)机制,它们的主要区别如下:

  1. Filter(过滤器):
  • 主要用途:修改数据
  • 返回值:必须返回修改后的值
  • 特点:
  • 用于过滤和修改数据
  • 可以链式调用(一个值可以被多个过滤器处理)
  • 通常用于修改文本、数组、对象等数据
  • 命名通常以动词过去式开头,如 the_contentwp_title

示例:

// 定义过滤器
add_filter('the_content', 'my_content_filter');

function my_content_filter(content) {     // 修改内容content = str_replace('旧文本', '新文本', content);     // 必须返回修改后的内容     returncontent;
}
  1. Action(动作):
  • 主要用途:执行特定操作
  • 返回值:不需要返回值
  • 特点:
  • 用于在特定时刻执行代码
  • 可以添加额外的功能
  • 通常用于在特定事件发生时执行操作
  • 命名通常以动词现在时开头,如 wp_headwp_footer

示例:

// 定义动作
add_action('wp_footer', 'my_footer_action');

function my_footer_action() {
    // 执行操作,不需要返回值
    echo '<div>页脚内容</div>';
}
  1. 主要区别总结:
特性FilterAction
目的修改数据执行操作
返回值必须返回修改后的值不需要返回值
命名习惯过去式(如 the_content现在时(如 wp_head
链式调用支持不支持
执行顺序按优先级顺序执行按优先级顺序执行
参数传递可以传递多个参数可以传递多个参数
  1. 实际应用场景:

Filter 的典型应用:

// 修改文章标题
add_filter('the_title', 'modify_title');
function modify_title(title) {     return '前缀 - ' .title;
}

// 修改文章内容
add_filter('the_content', 'add_ads_to_content');
function add_ads_to_content(content) {ads = '<div class="ads">广告内容</div>';
    return content .ads;
}

Action 的典型应用:

// 在头部添加自定义脚本
add_action('wp_head', 'add_custom_script');
function add_custom_script() {
    echo '<script>console.log("自定义脚本");</script>';
}

// 在文章发布时执行操作
add_action('publish_post', 'notify_admin');
function notify_admin(post_id) {     // 发送通知邮件等操作 }</code></pre> <!-- /wp:code -->  <!-- wp:list {"ordered":true,"start":5} --> <ol start="5" class="wp-block-list"><!-- wp:list-item --> <li>优先级和参数:两者都支持优先级和参数数量:</li> <!-- /wp:list-item --></ol> <!-- /wp:list -->  <!-- wp:code --> <pre class="wp-block-code"><code>// Filter 示例 add_filter('the_content', 'filter_function', 10, 2); function filter_function(content, arg2) {     returncontent;
}

// Action 示例
add_action('wp_footer', 'action_function', 20, 3);
function action_function(arg1,arg2, $arg3) {
    // 执行操作
}
  1. 移除钩子:
    两者都可以被移除:
// 移除 Filter
remove_filter('the_content', 'filter_function');

// 移除 Action
remove_action('wp_footer', 'action_function');

总的来说,Filter 和 Action 是 WordPress 插件和主题开发中非常重要的机制,它们允许开发者在不修改核心代码的情况下扩展和修改 WordPress 的功能。选择使用哪种钩子取决于你想要实现的功能:如果需要修改数据,使用 Filter;如果需要执行操作,使用 Action。

评论

发表回复

人生梦想 - 关注前沿的计算机技术 acejoy.com 🐾 步子哥の博客 🐾 背多分论坛 🐾 知差(chai)网