17

子テーマにテーマ フレームワークを使用しています。多くのフックがありますが、特に 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);
?>

アクションの内容は問いません。

私の質問は次のとおりです。問題の 5 つのアクションの優先度を変更するにはどうすればよいですか。たとえば、thematic_access() を thematic_brandingopen() の前にロードする必要があります。これを行う唯一の方法は、アクションを削除して再度追加することです。

<?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 にアクションを格納するデータ構造にアクセスして並べ替え/並べ替える方法はありますか?

4

3 に答える 3

11

ワードプレスから

デフォルトの 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);
于 2012-09-22T02:25:33.043 に答える
6

自己宣伝ではありませんが、プライオリタイズ フックと呼ばれる WordPress プラグインを介して非コーディング ソリューションを提供するために、これについていくつかの作業を行いました。私のプラグインを使用すると、UI を介してさまざまな登録済みフックの優先度を設定し、実行時にオーバーライドを実行して、コードが変更されないようにすることができます。

于 2012-11-20T15:57:43.750 に答える
3

これが誰かを助ける場合に備えて、変数アクションが格納されているのは

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

これは、アクションが追加されたときにキーが優先される配列の配列です。

于 2015-08-20T13:53:07.873 に答える