PHP If / Else用于Wordpress自定义字段

时间:2011-01-03 20:03:31

标签: php wordpress

我有一个使用自定义字段的网站,如果正在使用该字段,我想要显示该字段的内容,如果每个帖子没有使用该字段,那么当然不显示字段的内容。

似乎下面的代码不正确,因为当Post没有使用任何自定义字段时,它会在else块中显示内容。

非常感谢任何帮助!

以下是有问题的帖子: http://beta.ohsinsider.com/insider-top-stories/workers%E2%80%99-compensation-may-not-shield-you-from-lawsuits-by-injured-workers

以下是Post Edit,显示我在代码中调用的字段未被使用(http://screencast.com/t/aBjt1drIw)。

我已经确认,当我输入自定义字段的值时,它是在Post中输出的。

以下是我正在使用的代码:

<?php
    $pdfurl = get_post_meta($post->ID, 'pdf', true);
    $wordurl = get_post_meta($post->ID, 'word', true);
    if( !empty($pdf) || !empty($word) ){
    ?>
    <?php /* show nothing then */ } else { ?>
    <div id="post_downloads_box">
        <h3 class="single_related_footer">Dfownload Now</h3>
        <div id="post_downloads_box_left">
            <a target="_blank" href="<?php echo get_post_meta($post->ID, 'pdf', true); ?>"><img src="<?php bloginfo('template_url'); ?>/images/post_pdf_icon.jpg" /></a>
        </div>
        <div id="post_downloads_box_right">
            <a target="_blank" href="<?php echo get_post_meta($post->ID, 'word', true); ?>"><img src="<?php bloginfo('template_url'); ?>/images/post_word_icon.jpg" /></a>
        </div>
    </div>
    <?php } ?>  

3 个答案:

答案 0 :(得分:1)

你的代码块有点令人困惑......部分是因为你的逻辑没有考虑如果帖子有PDF自定义字段而不是Word自定义字段会发生什么......你仍然会显示两个集合标记。相反,我会建议:

<?php if( get_post_meta($post->ID, 'pdf', true) && get_post_meta($post->ID, 'word', true) ) : ?>

<div id="post_downloads_box">
    <h3 class="single_related_footer">Download Now</h3>
    <div id="post_downloads_box_left">
        <a target="_blank" href="<?php echo get_post_meta($post->ID, 'pdf', true); ?>"><img src="<?php bloginfo('template_url'); ?>/images/post_pdf_icon.jpg" /></a>
    </div>
    <div id="post_downloads_box_right">
        <a target="_blank" href="<?php echo get_post_meta($post->ID, 'word', true); ?>"><img src="<?php bloginfo('template_url'); ?>/images/post_word_icon.jpg" /></a>
    </div>
</div>

<?php endif; ?>

这将检查两个自定义字段,如果缺少任何一个字段,它会跳过呈现标记并“不显示任何内容”。如果两者都在那里,它会呈现你的标记。

答案 1 :(得分:0)

反转第一个陈述的逻辑将是理想的解决方案。

<?php
$pdfurl = get_post_meta($post->ID, 'pdf', true);
$wordurl = get_post_meta($post->ID, 'word', true);
if( empty($pdf) && empty($word) ) {
?>
    <div id="post_downloads_box">
        <h3 class="single_related_footer">Dfownload Now</h3>
        <div id="post_downloads_box_left">
            <a target="_blank" href="<?php echo get_post_meta($post->ID, 'pdf', true); ?>"><img src="<?php bloginfo('template_url'); ?>/images/post_pdf_icon.jpg" /></a>
        </div>
        <div id="post_downloads_box_right">
            <a target="_blank" href="<?php echo get_post_meta($post->ID, 'word', true); ?>"><img src="<?php bloginfo('template_url'); ?>/images/post_word_icon.jpg" /></a>
        </div>
    </div>
<?php } ?>

注意虽然这是反转逻辑,但似乎不正确。如果两者都是空的,这将显示下载链接。以下内容应为您的if声明。

if (!empty($pdf) || !empty($word))

答案 2 :(得分:-2)

似乎这更好:

<?php $values = get_post_custom_values("pdf"); if (isset($values[0])) {?>
    <div id="post_downloads_box">
        <h3 class="single_related_footer">Dfownload Now</h3>
        <div id="post_downloads_box_left">
            <a target="_blank" href="<?php echo get_post_meta($post->ID, 'pdf', true); ?>"><img src="<?php bloginfo('template_url'); ?>/images/post_pdf_icon.jpg" /></a>
        </div>
        <div id="post_downloads_box_right">
            <a target="_blank" href="<?php echo get_post_meta($post->ID, 'word', true); ?>"><img src="<?php bloginfo('template_url'); ?>/images/post_word_icon.jpg" /></a>
        </div>
    </div>
    <?php } else {} ?>