Согласно кодексу 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
Крюк не передает три аргумента, только один.
Я просто пытаюсь обновить мета сообщения, когда сообщение сохранено. Что я здесь не так делаю?
зарегистрированный обратный вызов для действия, подключенного к передается по умолчанию $accepted_args
; значение для этого составляет 1.
add_action( string $tag, callable $function_to_add, int $priority = 10, int $accepted_args = 1 )
Это должно быть установлено на 3, чтобы получить все 3.
Если код находится в 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']));
}
}