WordPress如何在调用附加到其他钩子的函数之前调用附加到某个操作钩子的函数

时间:2017-04-02 作者:IAmDhar

我们知道,操作挂钩附带的回调函数的执行有一定的顺序。

enter image description here

WordPress如何决定在执行所有挂钩时应该优先考虑哪些操作?

4 个回复
SO网友:Fayaz

WordPressdoesn\'t 而是使用某种优先级同时执行所有操作和筛选器(即挂钩),execution order of these action and filter hooks are hard coded within WordPress core PHP files.

在WordPress源代码中,搜索以下四个函数调用(使用任何文本编辑器的“在文件中查找”功能):

  1. apply_filters => 应用特定筛选器。

  2. apply_filters_ref_array => 应用特定筛选器,指定数组中的参数。

  3. do_action => 执行特定操作。

  4. do_action_ref_array => 执行特定操作,指定数组中的参数。

    您将看到上述每个函数调用在WordPress源代码中被多次使用,相应操作和过滤器挂钩的执行顺序(优先级)取决于WordPress何时进行这些函数调用。

    由于PHP本身逐行执行代码,这些函数及其相应挂钩的执行顺序也取决于哪个PHP文件&;这些函数调用位于哪一行。

    Note: 尽管每个具体行动的执行顺序;过滤器挂钩是在代码中预先确定的,单个挂钩的多次使用的执行顺序由$priority 参数

    WordPress硬编码这些函数调用,以确保这些操作的执行顺序;过滤器挂钩是预先确定的。否则,开发人员将有实时的硬编码主题&;插件。

    Note: 由于4.7 WordPress在内部使用WP_Hook 班因此,您还可以查看该类以了解所有这些是如何在内部完成的。

SO网友:ricotheque

顺序是由WordPress的编码方式决定的。如果您试图更改动作执行顺序,则必须编辑WordPress核心文件(并中断大量内容)。

如果你想确保某些事情在其他事情之前就执行,你可以改变你如何钩住WordPress的动作。

请记住,某些WordPress功能(例如is_single(), is_home(), 等)只有在特定的WordPress钩子运行后才能工作。

更多信息载于此处:How to get WordPress' hook run sequence?

SO网友:Faysal Mahamud
SO网友:Nathan Johnson

每当回调被添加到挂钩(动作或过滤器)时,它都会被添加一个优先级。如果未指定优先级,则使用默认值10。

//* Add action to init at priority 4
add_action( \'init\', \'wpse_262184_init\', 4 );
对于每个激发的钩子,回调将按递增的顺序或优先级运行(首先是较小的数字)。如果两个回调具有相同的优先级,那么它们将按照添加到挂钩的顺序运行。

相关推荐

apply_filters to $GLOBALS

我正在使用Pootle页面构建插件构建一个单页网站。使用get\\u page,我在1页上显示每个单独的页面。为了针对Pootle页面生成器内容,我使用以下代码:$content = $GLOBALS[\'Pootle_Page_Builder_Render_Layout\']->panels_render( $page_data->ID ); 当我尝试实现一个像旋转木马这样的插件时,我需要使用一个短代码,但短代码不起作用。为了使短代码有效,我需要使用apply_filters(\'