我几年来一直在使用同一段代码,只是在过去的几周里才开始播放。现在它显示了'blog_posts'是否为真的内容 - 有人能告诉我为什么会这样,以及如何修复它?
<?php if ( get_post_meta($post->ID, 'blog_posts', true) ) : ?>
非常感谢
答案 0 :(得分:0)
来自Codex page for get_post_meta()
:
如果没有返回任何内容,除非$ single已设置为true,否则该函数将返回一个空数组,在这种情况下返回一个空字符串。
空字符串或空数组与boolean false
不一样。将您的代码更改为:
<?php if( ! empty( get_post_meta( $post->ID, 'blog_posts', true ) ) ) : ?>
它应该按预期工作。
empty()
会在空数组或空字符串上返回boolean true
,因此single
上的get_post_meta()
参数是true
还是false
或boolean false
。
<强>被修改强>
我错误地认为空字符串与array( '' )
不一样。根据您的评论,即使您已将array()
参数设置为{,我也会看到您返回''
(而不是single
或true
) {1}}, 只返回一个字符串。
要实现这一目标,您可以这样做:
<?php if ( array( '' ) != get_post_meta( $post->ID, 'blog_posts', true ) ) : ?>
但是,即使你明确告诉不,WordPress也会返回array
,这仍然很奇怪。