В общем, решение простое:
Первая отладка с var_dump()
что $photos
возвращает. Чем вы будете знать, в чем проблема.
count()
принять массив, и если у вас есть false
, null
или что-то еще, у вас будет ошибка.
Просто сделайте что-то вроде этого:
$photos = get_field('gallery');
if(!is_array($photos) || empty($photos)) $photos = array(); // FIX ERROR!!!
$max = count($photos); <------- error line here -------->
$current = (isset($_GET['image']) && !empty($_GET['image']) && is_numeric($_GET['image'])) ? intval($_GET['image']) : 0;
if ($current > 0) {
if ($current > $max) $current = $max;
if ($current < 1) $current = 1;
}
$next = (($current + 1) < $max) ? ($current + 1) : $max;
$prev = (($current - 1) > 1) ? ($current - 1) : 1;
?>
С if(!is_array($photos) || empty($photos)) $photos = array();
до $max = count($photos);
вы исправляете свою проблему, и все, что не является массивом или пустым (0, NULL, FALSE, ''), будет исправлено, и вы будете иметь в счетчике $max
результат 0
потому что массив пуст.
ВАЖНО !!!
Вы не должны так работать. Вам нужно знать, какую информацию вы получаете и ожидаете в переменных. Код должен оставаться чистым, и исправление таких ошибок - плохая практика. Если вы получаете массив, то этот массив ожидается, и вы должны иметь проверки перед любым вычислением.
UPDATE:
Также у вас есть ошибка в
$current = (isset($_GET['image'])) ? intval($_GET['image']) : false;
if ($current !== false)
Я исправляю это так:
$current = (isset($_GET['image']) && !empty($_GET['image']) && is_numeric($_GET['image'])) ? intval($_GET['image']) : 0;
if ($current > 0)
Причина в том, что у вас есть расчеты ниже, и вы не ожидаете, что (false + 1)
будет чем-то хорошим. false
можно перевести на 0
, но в вашем случае вы также можете получить ошибку. В этом случае я заменяю false
на 0
, добавляю empty()
и is_numeric()
check, и у вас там нет ошибок.