Как изменить приоритет действия в 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_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?
Ответы
Ответ 1
От 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);
Ответ 2
не для самообучения, но я проделал определенную работу над этим, чтобы предоставить некодирующее решение через плагин WordPress под названием "Приоритеть крючков" . Мой плагин позволяет вам устанавливать приоритеты различных зарегистрированных крючков через пользовательский интерфейс и выполняет переопределение во время выполнения, поэтому код не изменяется.
Ответ 3
На всякий случай это помогает кому-то, переменные действия хранятся в
global $wp_filter;
var_dump( $wp_filter[$hook_name] );
Каков массив массивов с ключевыми приоритетами при добавлении действия.