Пользовательские рычаги в WordPress через плагины

Я пытаюсь создать рычаг в одном плагине Wordpress, который мог использоваться другими плагинами. Прежде всего это даже возможно? Я также отправляю некоторый дополнительный args, таким образом, это может быть 2 вопросами в одном, так как я испытывал затруднения при нахождении категорической информации о том, как сделать это.

Вот то, что я попробовал до сих пор:

В плагине, который создает рычаг (называют это Плагином 1) я добавил:

do_action('plugin1_hook', $customArg1, $customArg2, $customArg3);

в точке, которую я хочу, чтобы рычаг запустил. Затем в другом плагине (Плагин 2), я добавил:

add_action('plugin1_hook', 'my_function');

и

function my_function($customArg1, $customArg2, $customArg3) { //my code }

Это, кажется, не запускает функцию, как бы то ни было. Мой перезабор для этого был рычагом Wordpress comment_post, который определяется Wordpress как:

do_action('comment_post', $comment_ID, $commentdata['comment_approved']);

и я использую как:

add_action('comment_post', 'my_comment'); 
function my_comment($comment_id) { //my code }

Вышеупомянутый отрывок функционирует правильно.

8
задан Cœur 5 August 2017 в 07:24
поделиться

3 ответа

Я подумал, что отправлю это в качестве ответа, так как это немного яснее объяснить :)

Когда вы подключаете функцию, но не указываете количество аргументов, WordPress всегда будет передать один аргумент.

Вы не получите ошибок для чего-то вроде этого;

function do_my_hook($arg1, $arg2 = '', $arg3 = '') {}
add_action('my_hook', 'do_my_hook');

Но вы получите что-то вроде этого;

function do_my_hook($arg1, $arg2, $arg3) {}
add_action('my_hook', 'do_my_hook');

WordPress пытается вызвать do_my_hook () , но возвращает только один аргумент . В первом примере используются аргументы функции PHP по умолчанию , так что вы можете вызывать функцию без передачи всех доступных аргументов, но без ошибок.

Второй пример вызовет ошибку PHP «отсутствует аргумент (ы)», поскольку все три аргумента являются обязательными.

Исправление?

add_action('my_hook', 'do_my_hook', 10, 3);

Идея определения количества аргументов, которые принимает ваша функция, заключается в том, чтобы избежать подобных ошибок (хотя технически их так же легко избежать, используя аргументы по умолчанию!).

5
ответ дан 5 December 2019 в 22:16
поделиться

Я предполагаю, что второй плагин загружается после первого, поэтому ловушка уже сработала, когда вы добавляете к нему действие. Вы можете попробовать это для первого плагина:

function my_custom_hook_insertion($arg1, $arg2, $arg3){
  do_action('plugin1_hook', $arg1, $arg2, $arg3);
}
add_action('plugins_loaded', 'my_custom_hook_insertion');

Это будет ждать, пока все плагины загрузятся, прежде чем запускать ловушку.

1
ответ дан 5 December 2019 в 22:16
поделиться

Изменение моего add_action на это устранило проблему:

add_action('plugin1_hook', 'my_function', 10, 3);

10 представляет приоритет, а 3 представляет количество аргументов, которые функция примет. Я не совсем уверен, как работает сопоставление, так как по умолчанию 1, и я использую множество хуков без указания 0 аргументов, и я использовал хуки, которые передают более 1 аргумента, но использовал только 1 аргумент в моей сигнатуре функции. Источник: Кодекс WordPress: Справочник по функциям / добавить действие

Тем не менее, он работает, поэтому возможны перекрестные перехватчики плагинов.

0
ответ дан 5 December 2019 в 22:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: