【问题标题】:what is difference between action hook and filter hook in wordpress?wordpress 中的动作钩子和过滤器钩子有什么区别?
【发布时间】:2017-04-28 15:26:27
【问题描述】:

我读到动作钩子用于调用函数,过滤器钩子用于在保存或显示在网站上之前过滤内容。你能告诉我我们使用动作和过滤钩子的项目示例的一些工作阶段吗?所以多了解会更好。

【问题讨论】:

标签: wordpress


【解决方案1】:

行动:做新事物。前任。添加 CSS 和 JS。

过滤器:做一些已经在 WordPress 中的事情。添加或删除一些东西。假设在发布内容后添加一些文本。这意味着用 WordPress 做一些事情。

示例代码:

add_action('admin_menu','my_func',8,2);
function my_func($one, $two){
    //Something here …
}

【讨论】:

    【解决方案2】:

    简而言之:

    Filter Hook:用于修改(过滤)一个值

    Action Hook:做点什么,就在此时


    过滤器钩子示例:

    $name = "Smith";
    $gender = "female";
    
    echo apply_filter('form_of_address', $name, $gender );
    
    
    
    // somewhere else
    add_filter( 'form_of_address', function( $name, $gender ) {
        
        if ( "female" == $gender ) {
            $name = "Mrs. " . $name;
        } else if ( "male" == $gender ) {
            $name = "Mr. " . $name;
        }
        
        return $name
        
    }, 10, 2 );
    

    【讨论】:

      【解决方案3】:

      您想知道操作和过滤事件(挂钩)之间的区别。

      让我们从了解 WordPress 中的钩子或事件开始。

      什么是钩子(事件)?

      通过插件 API,WordPress 为我们提供了在事件发生时运行我们的代码的方法。

      程序以从上到下的特定顺序运行。第 1 行运行,然后第 2 行运行,依此类推。当 WordPress 加载文件时,每个文件都会运行,依此类推。

      在处理网页请求时,WordPress Core 正在运行代码行并做一些事情。但是,如果您需要在请求周期的某个时间点运行您的代码怎么办?例如,假设您要更改帖子的默认主题的署名。使用过滤器事件(挂钩),您可以获得:

      • 访问实际值或 HTML 之前它被发送到浏览器
      • 能够更改该值或 HTML
      • 能够在网页请求周期的特定时间点运行其他代码。

      为什么会有钩子(事件)?

      没有我们的自定义主题或插件,WordPress 开箱即用。但是插件 API 为您和我以及所有开发人员提供了自定义、更改默认行为和扩展 WordPress 的方法。

      它允许我们在需要时运行我们的代码,即在网页请求周期中的特定点。

      预注册

      为了让我们的代码运行,我们需要预先注册我们的回调,这是我们想要在该特定点运行的函数或方法。您使用add_action() 预注册一个动作事件回调。您使用add_filter() 预注册过滤器事件回调。

      当您预先注册回调时,它会被添加到注册查找表中,该表是一个数组。

      然后,当事件触发时,您的回调和所有其他回调将按顺序调用。您使用priority 参数设置顺序。参数将传递给您的回调。然后你的方法或函数运行。

      Here's a video 解释了这个过程的总体情况及其原因。

      动作与过滤器

      过滤事件(钩子)允许您过滤返回值。它使您(以及所有其他注册的回调)能够过滤,这意味着更改值。

      考虑一下。假设您想更改“阅读更多”链接。也许您希望它说“继续阅读”,也许您希望它成为一个按钮,而不仅仅是一个超链接。该过滤器允许您:

      • 接收当前值
      • 把它改成你想要的
      • 通过退货寄回

      那个新值然后被传递给所有其他注册的回调,然后最终返回到触发事件的代码行。

      动作事件

      动作事件(钩子)与过滤器相同,只是不返回值。

      事件被触发,例如initplugins_loaded。预先注册的回调按顺序调用,任何参数都传递给每个回调。您的函数或方法被调用。你可以运行你的代码。

      它为您提供了在网页请求周期中的特定点做某事的方法。

      总结

      想想事件管理系统的威力。如果您需要在所有插件加载后立即运行某些内容,请预先注册到 plugins_loaded 事件名称。当 Core 通过 do_action( 'plugins_loaded' ); 触发事件时,您的代码也会运行。

      过滤器和操作事件(挂钩)让您可以在网页请求周期中的特定点运行代码。

      区别

      过滤事件(挂钩)可让您在处理之前过滤或更改值。动作事件不允许过滤。

      如何触发事件?

      对于动作事件,您可以使用do_action( 'event_name' )do_action_ref_array( 'event_name', $args )

      对于过滤事件,可以使用apply_filters( 'event_name', $value_to_filter )apply_filters( 'event_name', $args )

      示例

      假设您想为帖子添加样式类属性。您可以预先注册到post_class 事件名称。您将收到一系列课程。

      add_filter( 'post_class', 'add_my_class_attribute_to_post_class' );
      /**
       * Add styling class to the post class.
       *
       * @since 1.0.0
       *
       * @param array $classes
       *
       * @return array
       */
      function add_my_class_attribute_to_post_class( array $classes ) {
          $classes[] = 'some-class-attribute'; 
      
          return $classes;
      }
      

      如果您想在首页的正文中添加样式类怎么办。

      add_filter( 'body_class', 'add_front_page_to_body_class' );
      /**
       * Add the class attribute "front-page" to the body classes.
       *
       * @since 1.0.0
       *
       * @param array $classes
       *
       * @return array
       */
      function add_front_page_to_body_class( array $classes ) {
          $classes[] = 'front-page';
      
          return $classes;
      }
      

      注意您是如何更改值然后将其返回的。

      【讨论】:

      • @ketan-sharma 上述内容是否帮助您理解了动作和过滤器之间的区别?
      猜你喜欢
      • 2010-11-14
      • 2023-04-10
      • 2012-06-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多