如何在Wordpress中更改操作优先级?

时间:2012-09-22 01:27:14

标签: php wordpress

我正在使用Thematic框架作为儿童主题。它有许多钩子,但我特别关注thematic_header()。 thematic_header()钩子添加了以下操作(通过add_action):

<?php
  add_action('thematic_header', 'thematic_brandingopen', 1);
  add_action('thematic_header', 'thematic_blogtitle', 3);
  add_action('thematic_header', 'thematic_blogdescription', 5);
  add_action('thematic_header', 'thematic_brandingclose', 7);
  add_action('thematic_header', 'thematic_access', 9);
?>

行动的内容无关紧要。

我的问题是:我如何改变有关五项行动的优先次序。例如,我想在thematic_brandingopen()之前加载thematic_access()。我能够弄清楚的唯一方法就是删除并重新添加动作,ala:

<?php
  function remove_thematic_actions() {
    remove_action('thematic_header', 'thematic_access');
    add_action('thematic_header', 'thematic_access', 0); //puts it above thematic_brandingopen
  } 
  add_action ('init', 'remove_thematic_actions');

这似乎是一种非常简单的完成事情的愚蠢方式。有没有办法访问和排序/重新排序任何存储WP中的操作的数据结构?

3 个答案:

答案 0 :(得分:9)

来自WordPress

  

如果使用默认值以外的优先级注册了挂钩   10,那么你还必须在调用中指定优先级   remove_action()。

所以我认为您可以先使用以下

删除
remove_action('thematic_header', 'thematic_brandingopen', 1);
remove_action('thematic_header', 'thematic_access', 9);

并使用不同的priority

再次添加
add_action('thematic_header', 'thematic_access', 1);
add_action('thematic_header', 'thematic_brandingopen', 2);

答案 1 :(得分:5)

不要自我推销,但我已经做了一些工作,通过名为Prioritize Hooks的WordPress插件提供非编码解决方案。我的插件允许您通过UI设置各种已注册挂钩的优先级,并在运行时覆盖,以便不修改代码。

答案 2 :(得分:3)

以防这有助于某人,变量操作存储在

global $wp_filter;
var_dump( $wp_filter[$hook_name] );

这是一个数组数组,其中键是添加​​操作时的优先级。