Wordpress - meta box. Сохранение поста
На сайте созданы собственные кастомные поля. Подключаются через add_meta_box. Также висит хук при сохранении поста
add_action('save_post', array(myClass, 'savePost'),10, 2);
В целом все работает. Но иногда (на некоторых страницах) появляется ошибка сохранения.
Cannot redeclare myFunction() (previously declared...
Короче. периодически Wordpress пытается второй раз создать объект класса и у него это не получается. Нет никакой логики в появлении этой ошибки. Например, я удали текст из Гутенберга и страница больше не сохраняется (т.е. сами поля не трогал. код не трогал). Остальные страницы сохраняются.
Пробовал в хук save_post пихать и объект, и ссылку на объект (создавал отдельно), пихали ссылку (хотя. по-моему в php объекты и так по ссылке передаются), создавал анонимный класс и делал myFunction статической.
Если кто-то сталкивался с подобной проблемой - help.
Ответы (1 шт):
Wordpress вызывает save_post
два раза. Первый - при создании ревизии. второй - при обновлении поста. Отсюда и два экземпляра класса.
Если ревизия не нужна (в моем случае она не нужна), ее можно отключить, добавив в function.php
:
add_filter( 'wp_revisions_to_keep', '__return_zero' );
Если ревизия нужна, то скорее всего через проверку наличия класса или что-то дальше думать.