2014-02-13 7 views
1

Мой код ниже не выводит значения. Я думаю, что это имеет какое-то отношение к тому, как я объединил эхо-строки. Если я удалю HTML-теги, они будут выводиться, но мне нужно добавить стиль.WordPress - Использование условных выражений с настраиваемыми полями

Есть ли лучший способ достичь этого?

<?php 
    $location = get_post_meta(get_the_ID(), 'location', true); 
    $date = get_post_meta(get_the_ID(), 'date', true); 
    $season = get_post_meta(get_the_ID(), 'season', true); 
    if(!empty($location) && !empty($date) && !empty($season)) { 
     echo '<div class="post-extras">'; 
     echo '<p>' . 'Wedding Location: ' . $location . '</p>'; 
     echo '<p>' . 'Shoot Date: ' . $date . '</p>'; 
     echo '<p>' . 'Season: ' . $season . '</p>'; 
     echo '</div>'; 
    } 
?> 
+0

что вы имеете в виду лучший способ? так что у вас не так много «эха»? вы пытаетесь использовать, например, 'if ($ allthingshere):' и закрывать его как 'endif;', тогда вы можете иметь нормальный html внутри – jycr753

+0

Я имел в виду «более чистый» способ, используя меньше кода. Это было слишком тяжело. – tmcd

ответ

0

хорошо, вы можете сделать это так же.

<?php if(!empty($location) && !empty($date) && !empty($season)):?> 
<div class="post-extras"> 
    <p>Wedding Location: <?php echo $location;?></p> 
    <p>Shoot Date: <?php echo $date;?></p> 
    <p>Season: <?php echo $season; ?></p> 
</div> 
<?php else:?> 
    <h4>Sorry, nothing to show.</h4> 
<?php endif;?> 

Update

<?php 
$location = get_post_meta(get_the_ID(), 'location', true); 
$date = get_post_meta(get_the_ID(), 'date', true); 
$season = get_post_meta(get_the_ID(), 'season', true); 
if($location && $date && $season): ?> 
    <div class="post-extras"> 
    <p>Wedding Location: <?php echo $location?></p> 
    <p>Shoot Date: <?php echo $date?></p> 
    <p>Season: <?php echo $season?></p> 
    </div> 
<?php endif;?> 

и отлаживать его, добавить что-то вроде этого, так что вы уверены, что вы получаете правильные значения, или любые значения из get_post_meta

$location = get_post_meta(get_the_ID(), 'location', true); 
printf("values is %s", $location); 
$date = get_post_meta(get_the_ID(), 'date', true); 
printf("values is %s", $date); 
$season = get_post_meta(get_the_ID(), 'season', true); 
printf("values is %s", $season); 

и в случае, если вы хотите показать только то, что у вас есть: вы можете использовать это ::

<?php 
$location = get_post_meta(get_the_ID(), 'location', true); 
$date = get_post_meta(get_the_ID(), 'date', true); 
$season = get_post_meta(get_the_ID(), 'season', true); ?> 
<div class="post-extras"> 
<?php 
if($location): ?> 
    <p>Wedding Location: <?php echo $location?></p> 
<?php endif;?> 
<?php if($date):?> 
    <p>Shoot Date: <?php echo $date?></p> 
<?php endif;?> 
<?php if($season):?> 
    <p>Season: <?php echo $season?></p> 
<?php endif;?> 
</div> 
+0

Этот выглядит чище, но он все еще не работает для меня. Я не понимаю. – tmcd

+0

@NatashaMcd вы получаете какие-либо значения из этих переменных? возможно, один из них возвращается в пустое, поэтому условие никогда не выполняется ... используйте 'else:' для вывода чего-то – jycr753

+1

Итак, я получил его для вывода сейчас. Я должен был иметь значения для всех трех, чтобы он выполнялся. Мне нужно условие, чтобы сказать, если есть хотя бы одно значение, для вывода html. Является ли это '&&' неправильным для выражения этого? Я думаю, мне нужен OR. – tmcd

0

Да есть:

echo <<<EOT 

    <div class="post-extras"> 
    <p>Wedding Location: {$location}</p> 
    <p>Shoot Date: {$date}</p> 
    <p>Season: {$season}</p> 
    </div> 

EOT; 

Это называется Heredoc, и особенно полезен в PHP для печати/вторя блоков HTML кода с видимым отступом. Способность бросать переменную там тоже очень полезна.

+0

Хорошо, спасибо. Я получил это для вывода, но это не выводит значение. Он выводит переменную как текст, а не ее значение. У меня есть весь div, завернутый в эти: '' – tmcd

+0

нет необходимости обертывать 'div' в кавычки. Вы проверили, что переменные работают с простой 'echo $ date; echo $ season; 'и т. д. перед тестированием в Heredoc? Не должно быть причин, по которым вы не можете выводить значения переменных в PHP Heredoc. Помните, что последний оператор 'EOT;' должен отображаться на собственной строке и в самом начале строки (перед пробелом нет пробелов). – shennan

Смежные вопросы