B/w简单函数调用和do_action调用的区别

时间:2015-06-04 作者:Abdul Rehman

亲爱的,我无法理解简单的函数调用&;do\\u action函数调用。

do_action:
我钩住函数,并将其放在我的一个模板文件中,以便在头模板中使用。

add_action(\'theme_document\', \'run_this\')
function run_this()
{
<!DOCTYPE html>
<html class="no-js">
<head>
}
然后我在头上打电话do_action(\'theme_document\') 它成功了。但当它在简单的函数调用中也起作用时,为什么需要调用动作挂钩呢?

当我通过以下简单函数调用使用此代码时,此代码也可以工作:

function run_this()
{
<!DOCTYPE html>
<html class="no-js">
<head>
}
我在标题中调用了这个函数,它也起作用了

run_this();

2 个回复
SO网友:Howdy_McGee

挂钩的主要好处(例如add_action ) 它们允许您根据优先级轻松添加其他逻辑。使用独立函数实现相同功能的唯一方法是直接编辑函数。您不希望在premium主题(或core)中执行此操作,因为任何时候有更新时,您的函数都将被覆盖。

以下示例将标题输出到<title> 标签首先,我们注册钩子并将调用放入header.php 在各自的位置归档。

/**
 * Custom Theme Title
 */
function theme_custom_title() {
    do_action( \'theme_custom_title\' );
}
header.php HTML

<title><?php echo theme_custom_title(); ?></title>
现在我们的自定义挂钩已经设置好了,让我们讨论一下优先级,即add_action. 优先级允许我们按照优先级的升序运行其他函数,让我们向自定义挂钩注册3个挂钩。

function custom_title_one() {
    echo "Hook One ";
}
add_action( \'theme_custom_title\', \'custom_title_one\', 10 );

function custom_title_two() {
    echo "Hook Two ";
}
add_action( \'theme_custom_title\', \'custom_title_two\', 20 );

function custom_title_three() {
    echo "Hook Three ";
}
add_action( \'theme_custom_title\', \'custom_title_three\', 1 );
如果我们运行上述命令,我们将在<title> 标签:

钩子三钩子一钩子二

虽然这看起来很简单,但对于您不想实际覆盖的函数/挂钩来说,这是非常棒的。我们可以把这三个钩子Child Theme 无论父主题更新多少次,它都将始终运行这些挂钩。如果函数接受参数,则可以有条件地处理和操纵参数,并返回不同的输出。作为一个独立的功能,这要困难得多,其目的是允许开发人员修改主功能,而不必实际覆盖其核心功能。

SO网友:s_ha_dum

Actionsfilters 旨在允许第三方代码(尽管Core也使用了大量的操作和过滤器)修改WordPress的工作方式,而无需对代码进行黑客攻击。也就是说,hooks 允许WordPress在不要求黑客修改代码主体的情况下进行扩展和修改,而新版本发布后,这将是一场噩梦。

钩子并不是简单地作为激发函数的方式。如果这就是你所做的一切,那么你就是在错误地使用它们。您应该使用挂钩和过滤器来运行修改其他代码的代码。例如,非常有用的pre_get_posts 修改WP_Query 操作:

function exclude_category( $query ) {
    if ( $query->is_home() && $query->is_main_query() ) {
        $query->set( \'cat\', \'-1,-1347\' );
    }
}
add_action( \'pre_get_posts\', \'exclude_category\' );
不使用钩子就意味着重写WP_Query 或者滚动您自己的SQL。

参考号:Clarification on filters and hooks

结束

相关推荐

使用快速编辑更新POST时,POST_ROW_ACTIONS过滤器不工作

我使用post\\u row\\u操作创建了两个链接,页面加载时显示良好。但使用快速编辑更新帖子后,链接将消失。是WordPress的bug还是我错过了什么。我的代码如下所示。add_filter(\'post_row_actions\', \'add_new_link\', 10, 2); public function add_new_link($actions, $page_object) { $actions[\'new_action\'] = \'<