需要有关为自定义元字段创建if语句的帮助

时间:2011-10-22 作者:jtarr523

我在用Wordpress。我有一个电影评论网站叫做Filmblurb. 对于我的博客帖子,我尝试创建不同类别的帖子。在“评论”类别下,我有一个“详细信息”框,作为我所有评论的元信息。

问题是,当我尝试创建一个包含“功能”或其他类别的帖子时,“详细信息”框仍然存在。基本上,我想创建一个PHP if语句,当我只写一篇“评论”文章时,它只返回以下代码序列。我正在使用“get_post_meta();在Wordpress中添加标签,为我写的每一篇“评论”帖子填写“详细信息”框。可以找到一篇示例帖子here.

<div class="box">
<div class="boxheader">Details</div>
<div class="text">
<h1>Genre</h1>
<p><?php echo get_post_meta($post->ID, \'genre\', true); ?></p>
<h1>Rated</h1>
<p><?php echo get_post_meta($post->ID, \'rated\', true); ?></p>
<h1>Release Date</h1>
<p><?php echo get_post_meta($post->ID, \'releasedate\', true); ?></p>
<h1>Runtime</h1>
<p><?php echo get_post_meta($post->ID, \'runtime\', true); ?></p>
<h1>Director</h1>
<p><?php echo get_post_meta($post->ID, \'director\', true); ?></p>
<h1>Cast</h1>
<p><?php echo get_post_meta($post->ID, \'cast\', true); ?></p>
<h1>Grade</h1>
<p><?php echo get_post_meta($post->ID, \'grade\', true); ?></p>
</div>

如果我需要更多解释,请告诉我。

1 个回复
最合适的回答,由SO网友:Wyck 整理而成

这被问了很多,所以让我们尝试并充分解释它。

我们可以简单地用if 语句并回显值,例如,

   <?php if ( get_post_meta($post->ID, \'genre\', true) ) : ?>
     <?php echo get_post_meta($post->ID, \'genre, true) ?> ?>
   <?php endif; ?>
但这很难看,为什么可以用两个查询来代替一个查询呢?因此,我们将post\\u meta值放入一个变量中,如$film_genre = get_post_meta($post->ID, \'genre\', true;.

这看起来像:

$film_genre = get_post_meta($post->ID, \'genre\', true);

  if ( $film_genre ) {
    echo \'something is here\';
  }
  else {
    echo \'nothing is here\';
  }
此外,我发现函数在检查是否为空方面有点不稳定,所以我添加了一个额外的检查,以确保使用!empty (检查元框值是否为空)。

看起来像:

 $film_genre = get_post_meta($post->ID, \'genre\', true);

  if (!empty($film_genre)) {
    echo $film_genre;
  }
但事实并非如此!由于您的示例使用了7个元框,所以只需使用一个查询函数即可使用get_post_custom. http://codex.wordpress.org/Function_Reference/get_post_custom

这看起来像:

$film_meta = get_post_custom( $post->ID );
if ( $film_meta ) 
{ 
    echo $film_meta[\'genre\'];
    echo $film_meta[\'rated\'];
    echo $film_meta[\'releasedate\'];
    echo $film_meta[\'runtime\'];
    echo $film_meta[\'director\'];
    echo $film_meta[\'cast\'];
    echo $film_meta[\'grade\'];
}
现在这已经好得多了,在一行中重复大量的内容可能看起来很愚蠢,但这只是一个示例,通常是您在值周围添加一些标记,或者可能是其他代码,重要的是您只使用一个函数,而且它干净、易于读取/理解和输出。

另请注意get_post_meta 设置为“true”并不意味着该值直观上为true,而是将结果设置为单个值,如果为空,则不返回任何结果。

结束

相关推荐