Я пытаюсь сделать следующее с wordpress :
«Если нет страницы 92, OR page parent – НЕ 92».
Вот что я имею:
<?php if (!is_page(92) || $post->post_parent !== 92) { echo $foo; } ?>
Если я использую одно или другое как условие, он работает; Когда я добавляю второе условие, он ломается.
Любая помощь будет хорошо оценена.
Ура!
Ваша проблема, вероятно, в использовании || вместо &&.
Вы хотите, чтобы это было эхо, если вы не на странице 92, и вы не находитесь в подстранице на стр. 92.
Предположим, вы находитесь на стр. 92, тогда ваш текущий код делает это:
if (false || true)
потому что 92 не является родителем страницы 92. Таким образом, поскольку одно условие истинно, оно запускается.
Если вы находитесь на подстранице из 92, то это наоборот:
if (true || false)
Если вы находитесь на странице, которая не является 92 или подстраницей 92, вы получаете:
if (true || true)
Таким образом, он всегда будет срабатывать, независимо от того, на какой странице вы находитесь, потому что || требует только одного истинного утверждения для того, чтобы все условие было истинным.
Следовательно, измените свой код на
<?php if (!is_page(92) && $post->post_parent !== 92) { echo $foo; } ?>
Это дает логический прогон, например:
Страница 92:
if(false && true) //false, won't trigger
Подстраница из 92:
if(true && false) //false, won't trigger
Некоторая несвязанная страница:
if(true && true) //true, will trigger
У вас есть дополнительный знак равенства в вашем заявлении. Оператор! == для булевых проверок. Поскольку post_parent автоматически решит «true», так как имеет значение, он всегда будет эхом «foo». Измените его на следующее.
<?php if (!is_page(92) || $post->post_parent != 92) { echo $foo; } ?>
Это только! = Нет! ==, только одно равное