为什么这个get_post_meta返回错误的值?

时间:2018-03-27 08:42:13

标签: php wordpress if-statement

尝试使用它的帖子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'仍会返回错误的值。

发生了什么?

1 个答案:

答案 0 :(得分:1)

您的代码正常工作(如编写)。

  1. 第一块:

    if(get_post_meta($previous_page, 'consultationFee', true)){
    
    }else{
      //will always work this code, because '0' converted to 0( false )
    }
    
  2. 第二块:

    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

  3. 您的$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'))