оператор if — PHP не обрабатывает второе условие в OR

Я много искал и не мог найти никакого решения, кроме написания большего кода.
Что мне нужно, это только для вывода, если установлена ​​одна из двух строк $ btn_.

В текущем состоянии, если $btn_orange = get_field('btn_orange') равно верно,
( $btn_black = get_field('btn_black') не обрабатывается в то время как get_field('btn_black') возвращает хорошее значение.

Короче: $btn_black не устанавливается, если $btn_orange является.

Это мой текущий код:

<?php if( ( $btn_orange = get_field('btn_orange') ) || ( $btn_black = get_field('btn_black') ) ): ?>

<div class="buttons">

<?php if($btn_orange && ( $btn_orange_url = get_field('btn_orange_url') ) ): ?>

<a class="btn btn-lg btn-primary" href="<?php echo $btn_orange_url; ?>"><?php echo $btn_orange; ?></a>

<?php elseif($btn_orange): ?>

<span class="btn btn-lg btn-primary"><?php echo $btn_orange; ?></span>

<?php endif;?>

<?php if($btn_black && ( $btn_black_url = get_field('btn_black_url') ) ): ?>

<a class="btn btn-lg btn-black" href="<?php echo $btn_black_url; ?>"><?php echo $btn_black; ?></a>

<?php elseif($btn_black): ?>

<span class="btn btn-lg btn-black"><?php echo $btn_black; ?></span>

<?php endif;?>

</div>

<?php endif; ?>

Теперь я могу отделить btn_orange а также $btn_black в отдельных блоках.
Но мне нужно <div class="buttons"> выводится, если один из двух или оба установлены со значениями get_field(),

Могу ли я сделать это в первом заявлении if?

редактировать: Задача решена. Я не должен ставить что-то вроде $x = func($parameter) в IF оператор, но сначала заполните строку, как указал dougtesting.net.

1

Решение

$ btn_black не заполняется значением get_field (‘btn_black’), когда $ btn_orange имеет значение true, поскольку PHP перестает оценивать оставшуюся часть оператора IF, поскольку первая часть имеет значение true.

Лучшее решение — заполнить переменные перед оператором IF следующим образом:

$btn_orange = get_field('btn_orange');
$btn_black = get_field('btn_black');

if($btn_orange || $btn_black) {
etc...
}

Тогда обе переменные могут быть использованы внутри оператора if.

1

Другие решения

для проверки состояния вы должны использовать == вместо =

if( ( $btn_orange == get_field('btn_orange') ) || ( $btn_black == get_field('btn_black')
1

Вы используете single = для проверки с вашим оператором if ==

1

Не стоит назначать значения в определенных условиях. Условия не предназначены для этого (именно поэтому большинство других языков программирования прямо запрещают это).

Сделай это:

<?php $btn_orange = get_field('btn_orange');
$btn_black = get_field('btn_black');
if ($btn_orange || $btn_black):
?>

PHP (и большинство других языков программирования) откажется от оценки условия, если нет никакого способа удовлетворить его или не удовлетворить его. Это было бы пустой тратой вычислительного времени и ресурсов, чтобы не делать этого.

Также рассмотрите следующий код:

 if (isset($array["index"])) && $array["index"] == "something)

Этот код сломался бы, если бы оба условия были оценены, так как, если индекс не установлен, то обращение к нему приведет к ошибке.

1

Вы можете попробовать это, назначив переменную перед вставкой в ​​условие

<?php
$btn_orange = get_field('btn_orange');
$btn_black = get_field('btn_black');
if ($btn_orange || $btn_black):
?>

<div class="buttons">

<?php if (isset ($btn_orange) && ( $btn_orange_url = get_field('btn_orange_url') ) ): ?>

Вы также можете перепроверить ответ var_dump();

0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector