trying to do if post meta !=0

时间:2011-08-16 作者:user7924

我试图在代码中执行一个简单的if函数,但由于某些原因,它不能正常工作。我已经检查过好几次了,想看看我是否遗漏了什么,但运气不好。我试图说我的值是0,如果不是其他的话,那么什么也不回显\\u评级。非常简单。。。

<?php if( get_post_meta( $post_id, \'ratings_users\', true ) === \'0\' ) {
}else{
the_ratings();
} ?>
<?php if(!get_post_meta( $post_id, \'ratings_users\', true ) !=\'0\' ) {
}else{
the_ratings();
} ?>
<?php if(get_post_meta( $post_id, \'ratings_users\', true ) ==\'0\' ) {
}else{
the_ratings();
} ?>
编辑:在这一点上,我尝试了3种不同的方法,如果自定义字段中的值为0,但仍然不能正常工作,那么这个愚蠢的东西就不会输出任何内容。

6 个回复
SO网友:t31os

你有问题的原因是0get_post_meta call返回false,也等于0.

if( !get_post_meta( $post_id, \'some-non-existant-field\', true ) == 0 )
与…相同。。。

if( get_post_meta( $post_id, \'some-existing-field\', true ) == 0 )
。。唯一的区别是,在一种情况下,字段不存在,而在另一种情况下,字段存在(并且具有零值),但两者都是真的。

此外,0 不同于\'0\', 一个是字符串值,另一个是实际的数值。自定义字段值存储为字符串,因此比较应遵循。。

if( get_post_meta( $post_id, \'some-existing-field\', true ) == \'0\' )
。。准确地说。

我意识到我不擅长解释这一点,所以我希望这能有所帮助(或者其他人能更好地解释)。

SO网友:kaiser

对于extand Marc Duncans(也称为t31os),回答:

您可以通过多种方式提问”if ( $some_val_A IS $some_val_B )“.相等与相同之间存在差异。

$real_world_ex = get_post_meta( $post_id, \'ratings_users\', true );

// Example: test this in your functions.php
function wpse26016_test_vars( $real_world_ex = \'\' )
{
    $some_int = (int) 1;
    $some_bool = (bool) 1;
    $some_string = (string) 1;

    echo \'<pre>\';
        echo \'I\\\'m an integer: \';
            var_dump( $some_int );
        echo \'<br />I\\\'m some boolean: \';
            var_dump( $some_bool );
        echo \'<br />I\\\'m some string: \';
            var_dump( $some_string );

    echo \'<hr><strong>Now we can see some comparison<strong><br />\';
        echo \'<br />I test if integer is <em>equal</em> boolean (notice the 2 "="-signs): \';
            var_dump( $some_int == $some_bool );
        echo \'<br />I test if integer is <em>identical</em> boolean (notice the 3 "="-signs): \';
            var_dump( $some_int === $some_bool );
        echo \'<br />I test if integer is <em>not equal</em> boolean: \';
            var_dump( $some_int != $some_bool );
        echo \'<br />I test if integer is <em>not identical</em> boolean: \';
            var_dump( $some_int !== $some_bool );

    echo \'<hr><strong>Now some real world example<strong><br />\';
        echo \'<br />This is the dump of what\'s inside your meta data: \';
            var_dump( $real_world_ex );

        echo \'<br />I test if integer is <em>equal</em> to your meta data: \';
            var_dump( $some_int == $real_world_ex );
        echo \'<br />I test if integer is <em>identical</em> to your meta data: \';
            var_dump( $some_int === $real_world_ex );

        echo \'<br />I test if boolean is <em>equal</em> to your meta data: \';
            var_dump( $some_bool == $real_world_ex );
        echo \'<br />I test if boolean is <em>identical</em> to your meta data: \';
            var_dump( $some_bool === $real_world_ex );

        echo \'<br />I test if string is <em>equal</em> to your meta data: \';
            var_dump( $some_string == $real_world_ex );
        echo \'<br />I test if string is <em>identical</em> to your meta data: \';
            var_dump( $some_string === $real_world_ex );
    echo \'<pre>\';
}
如您所见(粘贴时wpse26016_test_vars() 在您的模板中),比较“与值”或“类型”与值之间存在差异and 类型”。

始终使用此功能查看是否正确:)

SO网友:Chip Bennett

根据您的澄清,我建议如下:

<?php 
$rating = get_post_meta( $post_id, \'ratings_users\', true );

if ( \'0\' < $rating ) {
    the_ratings();
}
?>
或者,您可以使用:

<?php 
$rating = get_post_meta( $post_id, \'ratings_users\', true );

if ( \'\' != $rating && \'0\' != $rating ) {
    the_ratings();
}
?>
但我认为第一种方法会奏效;而且更加简洁。

这里需要注意的重要一点是get_post_meta() 返回empty string 如果未设置post meta值。

SO网友:user7924

我很感激所有的答案,但是$post\\u id是问题所在,应该是$post->id

<?php if(get_post_meta( $post->ID, \'ratings_users\', true ) ==\'0\' ) {
}else{
the_ratings();
} ?>

SO网友:Mamaduka

Try this:

if ( get_post_meta( $post_id, \'ratings_users\', true ) != 0 ) {
    the_ratings();
} else {
    // Do nothing here
}
SO网友:Carlos Adrián

get_post_meta($id, \'key\', true)
如果键存在,则返回字符串返回false 如果密钥不存在如果您使用的是wp postratings或任何其他使用自定义\\u字段的插件,则在使用密钥之前,它们不会创建密钥,因此您可以节省时间:

if(!get_post_meta()) {
    // when field doesn\'t exist (false) or the value is integer 0 or empty string \'\'
} else {
    // when the field exists
}

结束

相关推荐

Sort plugins by rating

当我想安装一个新的Wordpress插件时,我会搜索我想要的插件,并收到一个结果列表。有没有办法按评级或名称对结果进行排序?如果没有,它将是Wordpress的一个有用的补充。