Почему WordPress » save_post _ {$ post- & gt; post_type} ‘хук действия не передает правильное количество аргументов?

Согласно кодексу WordPress save_post _ {$ post-> post_type} следует передать три аргумента:

do_action( "save_post_{$post->post_type}", int $post_ID, WP_Post $post, bool $update )

Вот мой код:

add_action( 'save_post_guide', array($this, 'saveGuideMeta') );
function saveGuideMeta(int $post_ID, WP_Post $post, bool $update) {
if (isset($_POST['guide_keyword'])) {
update_post_meta($post_ID, 'guide_keyword', sanitize_text_field($_POST['guide_keyword']));
}
}

Я буквально скопировал подпись функции, чтобы убедиться, но она бросает ArgumentCountError когда я сохраняю сообщение (поэтому я знаю, что функция вызывается, а ловушка «работает»).

Исключение

Fatal error: Uncaught ArgumentCountError: Too few arguments to function saveGuideMeta(), 1 passed in public_html/wp-includes/class-wp-hook.php on line 288 and exactly 3 expected

Это как если бы save_post_guide Крюк не передает три аргумента, только один.

Я просто пытаюсь обновить мета сообщения, когда сообщение сохранено. Что я здесь не так делаю?

2

Решение

зарегистрированный обратный вызов для действия, подключенного к передается по умолчанию $accepted_args; значение для этого составляет 1.

add_action( string $tag, callable $function_to_add, int $priority = 10, int $accepted_args = 1 )

Это должно быть установлено на 3, чтобы получить все 3.

2

Другие решения

Если код находится в functions.phpтогда вам может понадобиться написать код действия как:

add_action( 'save_post_guide', 'saveGuideMeta' );

и если код находится в плагине Class и вы вызываете action в конструкторе Class, то вам нужно сделать функцию saveGuideMeta как public следующим образом

public function saveGuideMeta(int $post_ID, WP_Post $post, bool $update) {
if (isset($_POST['guide_keyword'])) {
update_post_meta($post_ID, 'guide_keyword', sanitize_text_field($_POST['guide_keyword']));
}
}
1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector