0

我正在制作一个侧边栏小部件,它只会出现在我的自定义帖子类型exhibitors单一模板上。

这个小部件只是从 中获取自定义字段元数据exhibitors并以列表格式输出。

每个自定义字段 post_meta 字段都有不同的用途,并且格式略有不同。有些只是文本,有些是超链接。


我的问题

如果我的 6 个 post_meta 中的任何一个存在,我就需要我的 WP Query 才能运行。

如果不存在,那么我不需要任何列表环境出现。

您将在下面看到我尝试过的方法,但失败得很惨。

<?php 

    $currentID      = get_the_ID();
    $exhibitorMeta      = new WP_Query(array(

      'post_type'       => 'exhibitors',
      'post_id'         => $currentID

)); ?>

<?php if ($exhibitorMeta->have_posts()) : ?> 

    <?php while ($exhibitorMeta->have_posts()) : $exhibitorMeta->the_post(); ?>


        <?php if (  get_post_meta($post->ID, 'Facebook Page', true) ||
                    get_post_meta($post->ID, 'Twitter User', true) ||
                    get_post_meta($post->ID, 'Web Address', true) ||
                    get_post_meta($post->ID, 'E-mail Address', true) ||
                    get_post_meta($post->ID, 'Stand Number', true) ||
                    get_post_meta($post->ID, 'Hall Number', true)
        ) { ?>

        <div class="module sidebar">

            <div class="module-head">

                Exhibitor Info

            </div>

            <div class="module-body">

                <ul class="sidebar-list">

                    <?php if (  get_post_meta($post->ID, 'Facebook Page', true) ) echo '

                        <li><a href="' . get_post_meta($post->ID, 'Facebook Page', true) . '">View our Facebook Page</a></li>

                    '; ?>

                    <?php if (  get_post_meta($post->ID, 'Twitter User', true) ) echo '

                        <li><a href="' . get_post_meta($post->ID, 'Twitter User', true) . '">Follow us on Twitter</a></li>

                    '; ?>

                    <?php if (  get_post_meta($post->ID, 'Web Address', true) ) echo '

                        <li><a href="' . get_post_meta($post->ID, 'Web Address', true) . '">View Website</a></li>

                    '; ?>

                    <?php if (  get_post_meta($post->ID, 'E-mail Address', true) )

                    $emailAddress = get_post_meta($post->ID, 'E-mail Address', true);

                    echo '

                        <li><a href="mailto:' . $emailAddress . '" title="' . $emailAddress . '" target="_blank">' . $emailAddress . '</a></li>

                    '; ?>

                    <?php if (  get_post_meta($post->ID, 'Stand Number', true) ) echo '

                        <li>Stand Number: ' . get_post_meta($post->ID, 'Stand Number', true) . '</li>

                    '; ?>

                    <?php if (  get_post_meta($post->ID, 'Hall Number', true) ) echo '

                        <li>Hall Number: ' . get_post_meta($post->ID, 'Hall Number', true) . '</li>

                    '; ?>

                </ul>

            </div>

            <div class="module-foot"></div>

        </div>

        <?php } ?>


    <?php endwhile; ?> 

<?php unset($exhibitorMeta); endif; wp_reset_query(); ?>

您可以看到我尝试||在 WP 查询中使用 PHP 比较来仅在我的 6 个元值中的任何一个存在时才显示列表环境。但由于某种原因,它只输出了 6 次列表环境。

所以一切都错了。

我的问题

是否可以使用相同的 WP 查询信息来检索 post_meta 数据信息,但如果不存在 post_meta,则不会出现列表环境。

但是,如果存在一个或多个 post_meta,则列表环境会出现,并且活动的 post_meta 会以它们的格式化方式出现。

任何都会很棒,因为我似乎找不到太多使用这样的多个 post_meta 值。

谢谢

4

1 回答 1

0

您希望 if 语句检查自定义值是否存在,而不是 get_post_meta 是否返回了某些内容。

尝试这个:

    <?php 
    $values = get_post_custom_values("Facebook Page"); 
    if ($values[0]) { ?>
        <li><a href="<?php echo $values[0]; ?>">View our Facebook Page</a></li>
    <?php 
    } else { 
        // 
    } 
    ?>
于 2012-07-04T04:10:27.630 回答