是否仅当值存在时显示自定义字段?

时间:2011-05-01 作者:Chris

我正在创建一个目录样式的页面模板,该模板使用Wordpress中的自定义元字段,用于在页面上生成多达10个目录列表。

下面的代码在这方面工作得很好,只有一个例外。如果我的一个目录页面只有5个列表,那么即使没有值,也会显示清单6-10的代码。

 <div class="listing"> 
 <h3 class="listing-title"><?php $values = get_post_custom_values("listing_heading_10"); 
 echo $values[0]; ?></h3> 
 <div class="listing-body">
 <p><?php $values = get_post_custom_values("listing_description_10"); echo $values[0]; ?>  </p> 
 </div><p class="listing-footer"><?php $values = get_post_custom_values("listing_url_10");    
 echo $values[0]; ?></p>  

我需要添加什么才能使代码仅在为该实例填充自定义元字段时显示。

换句话说,我在寻找一条规则,上面写着:

如果存在值,则显示完整目录列表(即listing\\u heading\\u 10、listing\\u description\\u 10和listing\\u url\\u 10)

如果这些值均不存在,则不显示任何内容

如果您对此有任何帮助或建议,我们将不胜感激。

3 个回复
SO网友:Chip Bennett

最简单的方法是添加一个简单的条件:

$values = get_post_custom_values("listing_heading_10");

if ( $values ) { ?>
     <h3 class="listing-title"><?php echo $values[0]; ?></h3> 
<?php }
也就是说,有什么理由不能将输出代码放入foreach

e、 g。

$values = get_post_custom_values( \'some_value\' );

foreach ( $values as $value ) {
     // echo output content here
}
将自定义的元值放入数组中可能会很有帮助,以便在它们存在的情况下进行循环。因此,不是:

$values = get_post_custom_values("listing_heading_10")
。。。您可以:

$values get_post_custom_values( \'listing_heading\' )
而不是

$values
。。。您可以输出:

$values[10]
等等。

SO网友:Chris

因此,我尝试使用您关于条件的上述建议(请参阅下面的代码),但我仍然存在一个问题,即如果没有填充元框,那么如果页面的列表少于10个,代码在源代码中仍然可见。我做错什么了吗?

我也喜欢在foreach循环中输出代码并使用数组的想法,但老实说,我对编程非常陌生,不知道该如何编写。

再次感谢你的帮助,我真的很感激。

 <div class="listing"> 

 <?php $values = get_post_custom_values("listing_heading_10"); 
 if ( $values ); ?>
 <h3 class="listing-title"><?php echo $values[0]; ?></h3>


 <?php $values = get_post_custom_values("listing_description_10"); 
 if ( $values ); ?>
 <div class="listing-body"><p><?php echo $values[0]; ?></p></div>

 <?php $values = get_post_custom_values("listing_url_10");
 if ( $values ); ?>
 <p class="listing-footer"><?php echo $values[0]; ?>
 </p>
 </div>
 <?php } 

SO网友:t31os

如果只需要第一个值,则无需获取所有值,只需从数组中提取一个值即可。

Custom Fields - Function Reference
您应该使用get_post_meta 而是将第三个参数设置为true(对于单个值)。

例如:。

get_post_meta( $post->ID, \'your-field-name\', true );
然后,不需要一直引用数组中的第一个项,例如。$arr[0] .. 您也不需要循环来迭代只需要单个值的数据。

get_post_meta 如果没有数据,则返回空数组/字符串(字符串/数组取决于您是提取多个还是单个,即为第三个参数设置了什么),但字段也可能有空值,因此这应该包括被设置但为空的字段,或者不同时存在的字段。

$field = get_post_meta( $post->ID, \'your-field-name\', true );
if( !empty( $field ) ) {
    // Do whatever you like when the field has a value..
}

结束

相关推荐