【问题标题】:PHP if-statement always returns falsePHP if 语句总是返回 false
【发布时间】:2020-08-09 19:17:26
【问题描述】:

我正在使用带有简单 if else 语句的 PHP 函数。如果 variable = 100 做某事,则做其他事情。

数据来自ACF Range Field。出于某种原因,即使 ACF 字段 = 100,该函数也总是返回 else 语句。我认为问题在于我尝试使用的 if 语句:=、==、!==、===或 >=。如果我将它更改为 single = 那么它总是返回 h2 Something 但所有其余部分都会返回 h2 其他内容,无论我在 ACF Range 字段中输入什么值。

function hovsa_shortcode() {
    $full_tegnet = get_field("tegnede_andele_");
    if ( $full_tegnet == '100' ) {

        return '<h2>Something</h2>';

    } else {

        return '<h2>Something else</h2>';

    }
}

add_shortcode( 'hovsa', 'hovsa_shortcode' );

【问题讨论】:

  • 如果你这样做var_dump($full_tegnet)会发生什么? strlen($full_tegnet) 返回什么?
  • 简单的等号是赋值。这仅在 IF 中的特殊情况下使代码难以辨认。双等号是比较运算符,应该匹配。正如@MC Emperor 所说,var_dump 打印什么?
  • hmm.. 出于某种原因,var_dump 返回 null。我以前使用过 get_field 并取得了巨大的成功。像这样: $tegnet = get_field("tegnede_andele_"); - $maxvalue = ($tegnet == 100) ? 0 : 10000;
  • ACF get_field 尝试将get_field() 与post id 一起使用并禁用任何格式化逻辑:&lt;?php $full_tegnet = get_field('tegnede_andele_', get_the_ID(), false); 如果仍然为空,那么您的字段确实为空!
  • 它仍然返回 null... 但是,我发现问题是我试图在循环之外获取数据。如果我回显这样的内容,那么它会回显 100: global $wp_query; $postid = $wp_query->post->ID; echo get_post_meta($postid, 'tegnede_andele_', true); wp_reset_query();

标签: php wordpress if-statement advanced-custom-fields equality


【解决方案1】:

假设$full_tegnet 应该是一个整数,您可以在下面使用

if(intval($full_tegnet) === 100){
     return '<h2>Something</h2>';
}

【讨论】:

    【解决方案2】:
    1. 根据文档ACF Range field 是一个数值。正如@Daisen Sekai 所说,您可以通过在您的条件中使用intval() 来转换$full_tegnet,并使用严格相等进行比较。

      <?php $full_tegnet = intval($full_tegnet); if ($full_tegnet === 100) { // your logic }

    2. 但是 PHP 会使用 type juggling,如果是 $full_tegnet = 100,那么您的声明 if ( $full_tegnet == '100' ) 应该返回 true。您可以在脚本中测试这段代码并查看结果:

      <?php $full_tegnet = 100; if ( $full_tegnet == '100' ) { echo '<h2>Something</h2>'; } else { echo '<h2>Something else</h2>'; }

    3. 您的代码中可能存在其他问题,更可能是 $full_tegnet 的值导致了这种情况。正如@MC Emperor 所说,执行var_dump($full_tegnet) 以获得$full_tegnet 的值/类型

    4. 使用内置 ACF 短代码查看返回的内容

      [acf field="{$tegnede_andele_}"]

    【讨论】:

      猜你喜欢
      • 2019-05-11
      • 1970-01-01
      • 2015-08-11
      • 1970-01-01
      • 2016-01-04
      • 2014-09-04
      • 1970-01-01
      • 2015-12-16
      • 2016-05-10
      相关资源
      最近更新 更多