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' );

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

→ Ссылка