Hook

来源:互联网 发布:淘宝节点处罚 编辑:程序博客网 时间:2024/06/05 20:36

Hook是WordPress提供的,允许你的插件“勾入”WordPress的程序,或者说,可以在特定时候执行你插件中的函数,从而使得你的插件执行。这里提供了两种hook:

  1. Action:Action(动作)是WordPress程序核心在程序执行的特殊点(特定事件发生)加载的。使用Action API,你的插件可以在这些特殊点执行一个或者多个在插件中编写的PHP函数。
  2. Filter:Filter(过滤器)是WordPress加载的,当文本被存入数据库或发送到浏览器之前,Filter可用来对其进行多种类型的处理。使用Filter,你的插件可以使用定义在其中的PHP函数来对文本进行多种处理。
  3. 编写Action函数

    在插件中创建Action的第一步是在插件中编写一个实现Action功能的PHP函数并且将其放入你的插件文件(插件文件必须放置在wp-content/plugins目录)中。比如,如果你希望当发表一篇日志后,发送Email通知给你的朋友,那么你可以定义如下函数:

    function email_friends($post_ID)  {
        $friends = 'bob@example.org,susie@example.org';
        mail($friends, "sally's blog updated", 
          'I just put something on my blog: http://blog.example.com');
        return $post_ID;
    }

    在大多数Action中,你的函数应该接受一个参数(通常是日志或者帖子的编号,这取决于你要进行的操作)。某些Action可能有多余一个参数--你可以通过查看Action的文档或者WordPress源代码来获得更多信息。除函数参数外,你还可以访问WordPress的全局变量以及执行WordPress中定义的其他函数(或者在你的插件文件中定义的函数)。

    注意:切记其他插件或者WordPress核心可能已经使用了你希望使用的函数名称,你可以浏览Avoiding Function Name Collisions(避免函数名称冲突--译者注)来获得更多信息。

    Hook(勾入)到WordPress

    完成你的函数的编写后,下一步就是将其hook(勾入)或者说注册到WordPress中,你可以通过执行全局空间中的add_action()函数来实现,如:

    add_action ( 'hook_name', 'your_function_name', [priority], [accepted_args] );

    此处

    • hook_name参数是WordPress提供的Action Hook(动作钩子)名称,这决定了你的函数应当和哪个事件结合。
    • your_function_name参数是你希望在特定事件(即hook_name参数指定的事件)后执行的函数名称。该函数可以是标准的PHP函数,在WordPress核心中定义的函数或者你自己在插件文件中定义的函数(如刚才我们编写的emai_friends函数)。
    • priority参数是一个可选的整型参数,他用来指明在结合特定事件的多个函数中,当前函数被执行的顺序(默认为10)。该参数指定的更小的数字会被更早的执行,priority参数相同的函数会依照他们被加入Action的顺序来执行。
    • accepted_args参数是一个可选的整型参数,他定义了你的函数中可以接收多少个参数(默认为1)。该参数是非常有用的,因为某些Hook可以向你的函数中传入多个参数。该参数在1.5.1版本中被新加入。

    在前面的例子中,我们可以在插件文件中加入如下代码:

    add_action('publish_post', 'email_friends');

    同样的,你也可以在Action Hook中移除Action,你可以参考Remove Actions来获得更多详情。

    Filters(过滤器)

    Filters(过滤器)是WordPress在执行中的特定点传递数据的函数,他发生在对数据进行操作(如将其加入数据库或发送到浏览器)之前。Filter建立在数据库到浏览器之间的处理(当WordPress生成页面时),同时也建立在浏览器到数据库之间的处理(当WordPress新增日志或者评论到数据库时);多数WordPress中的输入输出都通过了至少一个filter。WordPress默认已经实现了一些过滤操作,你的插件也可以加入你自己的过滤操作。

    将你的filter加入WordPress中的基本步骤如下:

    1. 编写用于过滤数据的PHP函数。
    2. 通过执行add_filter函数将filter Hook(勾入)到WordPress。
    3. 将你的PHP函数放入插件文件,并且将其激活。

    编写Filter(过滤器)函数

    Filter(过滤器)函数获得未经修改的数据,并返回修改后的数据(或者在某些情况下,返回null值来标识数据应当被删除或忽略)。如果你的filter不修改数据,那么应当返回原始数据,这样,如果必要,其余的插件可以继续修改数据。

    因此,在你的插件中创建filter的第一步是编写一个PHP函数来进行过滤处理,并且将其放在你的插件文件(插件文件必须放置在wp-content/plugins目录)当中。例如,如果你希望确保你的帖子和评论中不包含脏话,你可以定义一个存放禁止词汇的全局变量,然后编写如下的PHP函数:

    function filter_profanity($content) {
        global $profanities;
        foreach($profanities as $profanity) {
            $content=str_ireplace($profanity,'{censored}',$content);
        }
        return $content;
    }

    注意:切记其他插件或者WordPress核心可能已经使用了你希望使用的函数名称,你可以浏览Avoiding Function Name Collisions(避免函数名称冲突--译者注)来获得更多信息。

    Hook(勾入)到WordPress

    完成你的函数的编写后,下一步就是将其hook(勾入)或者说注册到WordPress中,你可以通过执行全局空间中的add_filter()函数来实现,如:

    add_filter('hook_name', 'your_filter', [priority], [accepted_args]);

    此处:

    • hook_name参数是WordPress提供的Filter Hook(过滤器钩子)名称,这决定了你的函数在何时发挥作用。
    • your_filter参数是你希望用来过滤的函数的名称。该函数可以是标准的PHP函数,在WordPress核心中定义的函数或者你自己在插件文件中定义的函数。
    • priority参数是一个可选的整型参数,他用来指明在结合特定事件的多个函数中,当前函数被执行的顺序(默认为10)。该参数指定的更小的数字会被更早的执行,priority参数相同的函数会依照他们被加入Action的顺序来执行。
    • accepted_args参数是一个可选的整型参数,他定义了你的函数中可以接收多少个参数(默认为1)。该参数是非常有用的,因为某些Hook可以向你的函数中传入多个参数。该参数在1.5.1版本中被新加入。
    • 删除Action和Filter

      在某些情况下,你会发现你希望你的插件屏蔽WordPress内建或者其他插件加入的Action或Filter。你可以通过执行remove_filter('filter_hook','filter_function')函数或者remove_action('action_hook','action_function')函数来实现。

      举例来说,remove_action('publish_post','generic_ping');会使得你在发表新日志时不发送日志引用(ping)。

      注意如果某个hook在注册时使用了除默认值10意外的priority参数,则你必须修改在remove_action()函数中的priority参数。同时也请注意,通常来讲除非你知道这样做的原因和后果,你不应当移除任何东西--请检查WordPress或者其他插件的源代码来保证这一点。

      默认应用的Filter和Action

      找出WordPress默认启用的filter和Action的最可靠方法是在WordPress核心文件中搜索 add_filter和add_action。

      WordPress 2.1

      在WordPress 2.1中,大多数默认filter和action是通过文件wp-includes/default-filters.php来加入的,少数其他的在如下文件中被加入:

      • wp-admin/admin-ajax.php
      • wp-admin/admin-functions.php
      • wp-admin/custom-header.php
      • wp-admin/edit.php
      • wp-admin/index.php
      • wp-admin/options-permalink.php
      • wp-admin/upload-functions.php
      • wp-admin/upload.php
      • wp-includes/bookmark.php
      • wp-includes/general-template.php
      • wp-includes/kses.php
      • wp-includes/plugin.php
      • wp-includes/rewrite.php
      • wp-includes/template-loader.php
      • wp-includes/theme.php


    http://www.ashuwp.com/courses/level/simple

  4. http://blog.wpjam.com/2007/11/09/write-plugin-by-yourself-begin/
原创粉丝点击