Я много искал и не мог найти никакого решения, кроме написания большего кода.
Что мне нужно, это только для вывода, если установлена одна из двух строк $ 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.
$ 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.
для проверки состояния вы должны использовать ==
вместо =
if( ( $btn_orange == get_field('btn_orange') ) || ( $btn_black == get_field('btn_black')
Вы используете single = для проверки с вашим оператором if ==
Не стоит назначать значения в определенных условиях. Условия не предназначены для этого (именно поэтому большинство других языков программирования прямо запрещают это).
Сделай это:
<?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)
Этот код сломался бы, если бы оба условия были оценены, так как, если индекс не установлен, то обращение к нему приведет к ошибке.
Вы можете попробовать это, назначив переменную перед вставкой в условие
<?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();