#php #wordpress-theming
Вопрос:
Я действительно ничего не знаю о PHP, и после поиска переполнения стека в поисках той же ошибки я не смог найти решение самостоятельно (я знаю, что решение-это ошибка, но я не знаю, куда ставить скобки). Эта ошибка вывела мой сайт из строя.
Фатальная ошибка: Непарентифицированный a ? b : c ? d : e не поддерживается. Используйте либо (a ? b : c) ? d : e, либо a ? b : (c ? d : e) в /var/www/vhosts/[домен]/httpdocs/wp-content/themes/Avada/includes/avada-functions.php на линии 443.
Строка 443 является:
$items .= '<input type="hidden" name="redirect" value="' . esc_url( ( isset( $_SERVER['HTTP_REFERER'] ) ) ? esc_url_raw( wp_unslash( $_SERVER['HTTP_REFERER'] ) ) : isset( $_SERVER['REQUEST_URI'] ) ? esc_url_raw( wp_unslash( $_SERVER['REQUEST_URI'] ) ) : '' ) . '">';
Комментарии:
1. Это не то, что мы можем вам сказать, поскольку расположение скобок зависит от порядка, в котором должны оцениваться выражения. В качестве альтернативы, проверьте, есть ли обновленная версия темы с исправленной этой ошибкой или уведомление об этом с обходным путем.
Ответ №1:
Проблема в данном случае заключается в использовании вложенных тернарных операторов. Ошибка говорит о том, что вы должны четко определить в скобках, какие элементы принадлежат какому выражению.
Дополнительные круглые скобки в вашем коде должны быть заключены вокруг следующего выражения
(isset( $_SERVER['REQUEST_URI'] ) ? esc_url_raw( wp_unslash( $_SERVER['REQUEST_URI'] ) ) : '')
поэтому ваша строка должна выглядеть так
$items .= '<input type="hidden" name="redirect" value="' . esc_url( ( isset( $_SERVER['HTTP_REFERER'] ) ) ? esc_url_raw( wp_unslash( $_SERVER['HTTP_REFERER'] ) ) : (isset( $_SERVER['REQUEST_URI'] ) ? esc_url_raw( wp_unslash( $_SERVER['REQUEST_URI'] ) ) : '') ) . '">';
Вместо этого я предлагаю другой подход — разбейте эту строку на более простые элементы, например, таким образом
$ternaryTrue = esc_url_raw(wp_unslash($_SERVER['HTTP_REFERER']));
$ternatyFalse = isset($_SERVER['REQUEST_URI']) ? esc_url_raw(wp_unslash($_SERVER['REQUEST_URI'])) : '';
$value = isset($_SERVER['HTTP_REFERER']) ? $ternaryTrue : $ternatyFalse;
$items .= '<input type="hidden" name="redirect" value="' . esc_url($value) . '">';