PHP 7.1|警告:中遇到非数字值

时间:2020-03-13 作者:Ersin

警告:第107行中遇到非数字值。

<div class="like">
    <?php 
        $nonce = wp_create_nonce("my_user_vote_nonce");
        $likeLink = admin_url(\'admin-ajax.php?action=my_user_vote&custom=like&post_id=\'.$post->ID.\'&nonce=\'.$nonce);            
    ?>
    <a class="like" data-image="<?php bloginfo(\'template_url\');?>/images/loading.gif" data-field="like" data-nonce="<?php echo $nonce ?>" data-post_id="<?php echo $post->ID ?>" href="<?php echo $link ?>" title="Like"><span><?php echo number_format(get_post_meta($post->ID, "like", true) * 1, 0, \',\', \'.\'); ?></span></a>
</div>
第107行

<a class="like" data-image="<?php bloginfo(\'template_url\');?>/images/loading.gif" data-field="like" data-nonce="<?php echo $nonce ?>" data-post_id="<?php echo $post->ID ?>" href="<?php echo $link ?>" title="Like"><span><?php echo number_format(get_post_meta($post->ID, "like", true) * 1, 0, \',\', \'.\'); ?></span></a>

1 个回复
最合适的回答,由SO网友:Tom J Nowell 整理而成

我怀疑问题在于:

echo number_format(get_post_meta($post->ID, "like", true) * 1, 0, \',\', \'.\')
在这里,我们使用名为like 然后乘以1,如果post meta不包含数字呢?如果它包含其他内容呢?

例如,如果我们2 x 4, 我们希望PHP给我们8,这是正确的,但如果我们告诉PHP多个2 x "hello"? 或 - ? 当这种情况发生时,PHP将抛出一个警告,与您遇到的警告相同。

因此,首先,不要将所有内容都涂抹在一行上,使用变量存储post meta输出:

$like = get_post_meta( $post->ID, "like", true );
然后改用该变量:

echo number_format($likes, 0, \',\', \'.\')
至此,我们可以检查变量并将其格式化为数字:

if ( !is_numeric( $likes ) ) {
    $likes = 0;
}
所以如果$likes 是一个false 或错误值,我们将其设置为0 而不仅仅是盲目地使用它,并希望得到最好的结果。

最后,这条线有很多事情要做,所以这可能根本不是引起警告的问题,这是不可能的。将来,而不是:

    <a class="like" data-image="<?php bloginfo(\'template_url\');?>/images/loading.gif" data-field="like" data-nonce="<?php echo $nonce ?>" data-post_id="<?php echo $post->ID ?>" href="<?php echo $link ?>" title="Like"><span><?php echo number_format(get_post_meta($post->ID, "like", true) * 1, 0, \',\', \'.\'); ?></span></a>
执行:

    <a
        class="like"
        data-image="<?php bloginfo(\'template_url\');?>/images/loading.gif"
        data-field="like"
        data-nonce="<?php echo $nonce ?>"
        data-post_id="<?php echo $post->ID ?>"
        href="<?php echo $link ?>"
        title="Like"
    >
        <span>
            <?php echo number_format(get_post_meta($post->ID, "like", true) * 1, 0, \',\', \'.\'); ?>
        </span>
    </a>
<上面的代码片段不包含任何修复,但是,它更容易阅读,也更容易调试,从而消除了对哪部分代码有问题的所有猜测

相关推荐

使用AJAX向WooCommerce产品循环添加参数

我正在尝试为我的WooCommerce商店页面制作一个AJAX产品过滤器。之前,我自己创建了查询,没有使用商店页面。然而,我想让我的代码现在更兼容WC。目前,我可以从查询字符串中设置变量来过滤WooCommerce产品循环。我使用以下代码执行此操作: add_action(\'pre_get_posts\', \'filter_pre_get_posts\' ); function filter_pre_get_posts( $wp_query ) { if(