将参数传递给与任何操作或过滤器钩子挂钩的函数

时间:2015-08-06 20:57:36

标签: wordpress

当我们创建一个函数来挂钩Wordpress中的动作或过滤器钩子时,我们可能需要一些参数传递给函数,因为我们不是手动调用函数。相反,action或filter hook会在需要时调用它。

我们如何将所有必要的参数传递给函数?动作或过滤器挂钩在调用任何函数时是否提供了一些参数?如果是,有什么方法可以了解任何动作或过滤器钩子的所有参数?

2 个答案:

答案 0 :(得分:2)

要了解关于钩子文档的信息,请参阅http://codex.wordpress.org/Plugin_API/Filter_Referencehttp://codex.wordpress.org/Plugin_API/Action_Reference。这两个站点将告诉您在调用钩子(动作或过滤器)时wordpress传递的参数的数量和类型。

或者您可以查看wordpress源本身。如果您使用的是像WebStorm这样的IDE,那么您可以执行编辑 - >查找>在路径中查找并搜索钩子名称以查找示例以及调用挂钩的源。

例如,要添加注销操作,请参阅wp_logout()中的功能pluggable.php。行do_action('wp_logout');显示调用操作的位置以及传递的参数(在本例中为none)。

/**
 * Log the current user out.
 *
 * @since 2.5.0
 */
function wp_logout() {
    wp_destroy_current_session();
    wp_clear_auth_cookie();

    /**
     * Fires after a user is logged-out.
     *
     * @since 1.5.0
     */
    do_action( 'wp_logout' );
}
endif;

然后,要在主题functions.php中添加要在do_action('wp_logout');处调用的自定义操作,请添加此

add_action('wp_logout', 'my_on_logout');

function my_on_logout() {
   // do what you want to do
   echo 'hi mom';
}

如果您从do_actiondo_filter或文档中看到钩子有参数,那么您可以在add_actionadd_filter的第四个参数中指定它们,像这样。下面的2表示要将两个参数传递给publish_product操作:($post_id, $post)

add_action('publish_product', 'my_on_product_update', 10, 2);
**
 * do something when a product is created
 * @param int $post_id the post id
 * @param WP_Post $post not used
 */
function my_on_product_update($post_id, $post) {
    // do action
    echo 'hi dad';
}

答案 1 :(得分:2)

您无法通过add_action传递参数。但是,您可以使用do_action

执行此操作

来自wp文档: <?php do_action( $tag, $arg ); ?>

$arg是你可以传递的论据。

所以,你可以这样做:

add_action( 'your_custom_action', 'your_function' );

...

do_action( 'your_custom_action', $your_arguments );