Подтвердить что ты не робот

Как изменить приоритет действия в 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?

4b9b3361

Ответ 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] );

Каков массив массивов с ключевыми приоритетами при добавлении действия.