尝试使用它的帖子ID显示基于上一页的显示通知。
问题是post meta值在Wordpress中存储为0(零),但是我的语句将其返回为true,当它应该为false时。
$previous_page = url_to_postid(wp_get_referer());
$consultationFee = null;
if(get_post_meta($previous_page, '_wp_page_template', true) == 'template-procedure-minimal.php') {
if(get_post_meta($previous_page, 'consultationFee', true) && get_post_meta($previous_page, 'consultationFee', true) === 0) {
$consultationFee = false;
} else {
$consultationFee = true;
}
}
var_dump($previous_page, get_post_meta($previous_page, 'consultationFee', true), $consultationFee);
C:\wamp64\www\bellavou\wp-content\themes\bellavou\template-request-consultation.php:11:int 3209
C:\wamp64\www\bellavou\wp-content\themes\bellavou\template-request-consultation.php:11:string '0' (length=1)
C:\wamp64\www\bellavou\wp-content\themes\bellavou\template-request-consultation.php:11:boolean true
我注意到值的var_dump是作为字符串返回的。这是正确的吗?这应该是一个整数。无论如何,甚至更改IF语句以检查字符串即。 === '0'
仍会返回错误的值。
发生了什么?
答案 0 :(得分:1)
您的代码正常工作(如编写)。
第一块:
if(get_post_meta($previous_page, 'consultationFee', true)){
}else{
//will always work this code, because '0' converted to 0( false )
}
第二块:
if(get_post_meta($previous_page, 'consultationFee', true) === 0){
}else{
//will always work this code, because ( string )'0' not equeal to ( int )0
}
如果最后一个参数$single
设置为true
, get_post_meta()
将返回字符串。如果没有找到值,将返回空字符串(''
)。因此,我们无法使用isset()
和empty()
函数进行检查。 isset(get_post_meta($previous_page, 'consultationFee', true))
将始终为真,并且正如您所希望的返回值( string )'0'
empty(get_post_meta($previous_page, 'consultationFee', true))
始终为true
。
您的$consultationFee
始终为true
,因为:
if(get_post_meta($previous_page, 'consultationFee', true)/*returns false*/ && get_post_meta($previous_page, 'consultationFee', true) === 0/*returns false*/) {
$consultationFee = false;
} else {
//we will reach this block
$consultationFee = true;
}
如果您想将get_post_meta
的返回值与( string )'0'
进行比较,请使用:
if(get_post_meta($previous_page, 'consultationFee', true) === '0'))