【问题标题】:How can I change action priority in Wordpress?如何更改 Wordpress 中的操作优先级?
【发布时间】:2012-09-14 10:22:18
【问题描述】:

我正在为子主题使用主题框架。它有许多钩子,但我特别关注 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_access() 在thematic_brandingopen() 之前加载。我能够弄清楚的唯一方法是删除并重新添加操作,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 中存储操作的任何数据结构?

【问题讨论】:

    标签: php wordpress


    【解决方案1】:

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

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

    这是一个数组,在添加操作时以键为优先级。

    【讨论】:

    • 这有助于我在使用类方法作为回调来删除类中的操作时遇到困难。关于如何“正确”删除动作有各种答案,但它们非常投入并且有条件地工作。我刚刚添加了全局 $wp_filter;和 unset($wp_filter['hookname'][priority]);
    【解决方案2】:

    不是为了自我推销,但我在这方面做了一些工作,通过一个名为 Prioritize Hooks 的 WordPress 插件提供非编码解决方案。我的插件允许您通过 UI 设置各种已注册钩子的优先级,并在运行时进行覆盖,因此代码不会被修改。

    【讨论】:

    • 谢谢!我一直在寻找编码解决方案,但至少,这是一个有趣的解决方案。保持良好的工作! :)
    【解决方案3】:

    来自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);
    

    【讨论】:

    • 是的,这就是我一直在做的事情。我的问题是是否有一种方法可以直接访问数组/WP 用于存储操作优先级的任何内容。我会继续这样做,因为我懒得深入研究 WP 源代码。对我来说,WP 没有提供一种在不删除和重新添加操作优先级的情况下更改操作优先级的方法,这对我来说似乎很奇怪。干杯
    • 我认为它是一个类属性,可以声明为私有/受保护但不是公共的。可能是无法直接访问,IMO。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-24
    • 2015-02-01
    • 2012-03-03
    • 2011-06-10
    • 2016-08-11
    相关资源
    最近更新 更多