Palych_tw
@Palych_tw
Типа веб-разработчик

Почему ACF обновляет поле 2 раза?

На странице поста есть кол-во просмотров. Раньше счетчик всегда делал обычным кастомным полем и скрывал его - "_views". Но сейчас клиент захотел в любой момент сам регулировать отображаемое кол-во просмотров поста. Сделал поле через ACF. Вот фрагмент кода из single.php
$views = (int) get_field('views');
        var_dump($views); //n
        $views = $views ? ++$views : 1;
        var_dump($views); //n+1
        var_dump(update_field('views', $views)); //true

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

Дебагер показывает только один update запрос
cd1893eb34f64ac9b1b46b8e3786a82a.png
Но при этом в БД записывается значение на 1 больше.
fb41a53c36984f3f8d73f6481770ddae.png
  • Вопрос задан
  • 196 просмотров
Пригласить эксперта
Ответы на вопрос 1
maxxannik
@maxxannik
Сайты на WordPress + Интернет магазины WooCommerce
Мб не стоит совать такой код в single.php. Бог знает кто этот шаблон дергает. Есть миллион возможных причин.
Вероятно проще сделать счетчик на хук template_redirect & is_singular('post'). Технически это более грамотно. И будет точно выполняться 1 раз на запрос.
Далее мб это как то связано с _views. Как видите ACF там хранит какие то свои служебные данные.

Сделайте свое поле как my_count_views. Работайте с ним.
А поле ACF при сохранении синхронизируйте со своим полем.

Это первое что в голову пришло. Либо вообще убрать нафиг ACF. Убрать скрытость поля. И пусть клиент правит это все через типовой метабокс Произвольные поля.

В крайнем случае напишите ему свой метабокс. Это 10 строк кода.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы