当值为零时,UPDATE_POST_META不保存

时间:2013-04-19 作者:HoGo

我对update_post_meta 功能
我有一个用户提交的值,我通过$_POST 然后保存到post meta。

一切正常,但当值\'0\' 帖子元未更新。

我的代码:

$id = absint($_POST[\'ex_id\']);
$key = (string) $_POST[\'id\'];
$value = (string) $_POST[\'value\'];

echo update_post_meta($id, \'wpptabs_\' . $key, $value);
有人知道可能出了什么问题吗?

3 个回复
SO网友:Charles Clarkson

update_post_meta() 呼叫update_metadata 从这一行开始:

if ( !$meta_type || !$meta_key )
    return false;
我编写了一个简单的测试(使用了大量的剪切和粘贴),以查看如何计算0的字符串值(而不是在PHP手册中查找):

<?php

$meta_key = (string) 0;

if ( ! $meta_key )
    echo "0 exits function<br />";

else {
    echo "0 remains in function<br />";
    echo "&nbsp;&nbsp;\\$meta_key = $meta_key<br />";
    echo "&nbsp;&nbsp;(integer) \\$meta_key = " . (integer) $meta_key . \'<br />\';
}

echo \'<br />\';
$meta_key = (string) 0;

if ( ! $meta_key )
    echo "(string) 0 exits function<br />";

else {
    echo "(string) 0 remains in function<br />";
    echo "&nbsp;&nbsp;\\$meta_key = $meta_key<br />";
    echo "&nbsp;&nbsp;(integer) \\$meta_key = " . (integer) $meta_key . \'<br />\';
}

echo \'<br />\';
$meta_key = (string) \'0\';

if ( ! $meta_key )
    echo "(string) \'0\' exits function<br />";

else {
    echo "(string) \'0\' remains in function<br />";
    echo "&nbsp;&nbsp;\\$meta_key = $meta_key<br />";
    echo "&nbsp;&nbsp;(integer) \\$meta_key = " . (integer) $meta_key . \'<br />\';
}

echo \'<br />\';
$meta_key = 0x0;

if ( ! $meta_key )
    echo "0x0 exits function<br />";

else {
    echo "0x0 remains in function<br />";
    echo "&nbsp;&nbsp;\\$meta_key = $meta_key<br />";
    echo "&nbsp;&nbsp;(integer) \\$meta_key = " . (integer) $meta_key . \'<br />\';
}

echo \'<br />\';
$meta_key = (string) 0x0;

if ( ! $meta_key )
    echo "(string) 0x0 exits function<br />";

else {
    echo "(string) 0x0 remains in function<br />";
    echo "&nbsp;&nbsp;\\$meta_key = $meta_key<br />";
    echo "&nbsp;&nbsp;(integer) \\$meta_key = " . (integer) $meta_key . \'<br />\';
}

echo \'<br />\';
$meta_key = \'0x0\';

if ( ! $meta_key )
    echo "\'0x0\' exits function<br />";

else {
    echo "\'0x0\' remains in function<br />";
    echo "&nbsp;&nbsp;\\$meta_key = $meta_key<br />";
    echo "&nbsp;&nbsp;(integer) \\$meta_key = " . (integer) $meta_key . \'<br />\';
}

echo \'<br />\';
$meta_key = (string) \'0x0\';

if ( ! $meta_key )
    echo "(string) \'0x0\' exits function<br />";

else {
    echo "(string) \'0x0\' remains in function<br />";
    echo "&nbsp;&nbsp;\\$meta_key = $meta_key<br />";
    echo "&nbsp;&nbsp;(integer) \\$meta_key = " . (integer) $meta_key . \'<br />\';
}
结果是:

0 exits function

(string) 0 exits function

(string) \'0\' exits function

0x0 exits function

(string) 0x0 exits function

\'0x0\' remains in function
  $meta_key = 0x0
  (integer) $meta_key = 0

(string) \'0x0\' remains in function
  $meta_key = 0x0
  (integer) $meta_key = 0
因此,要添加值0,可以将其更改为字符串“0x0”,并在检索时将其转换为整数。0x0是0的二进制(我认为)。

SO网友:Simon Blackbourn

PHP处理0 相当于false 用于比较。因为update_post_meta 函数在保存前检查值,它退出是因为0 == false.

您可以在保存post meta之前执行类似的操作,这有点粗糙,但可以:

if ( 0 === $value ) {
    $value = \'zero\';
}
然后,当您稍后检索值时,只需执行相反的操作:

$value = get_post_meta( $post_id, \'meta-key\', true );
if ( \'zero\' == $value ) {
    $value = 0;
}

SO网友:Chunkford

问题在于update_metadata() 内的功能meta.php 那个update_post_meta() 呼叫

$result = $wpdb->update( $table, $data, $where );
if ( ! $result )
    return false;
返回值为0 然后if语句正确地将其视为false,尽管0 已保存到数据库。

只有在更新时才会发生这种情况。如果添加了一个新的post meta,其值为0 然后按预期返回行id。

结束

相关推荐

列出分类法:如果分类法没有POST,就不要列出分类法--取决于定制的POST-META?

这可能很难解释,我不知道是否有解决办法!?我有一个名为“wr\\u event”的自定义帖子类型和一个名为“event\\u type”的分层自定义分类法。自定义帖子类型有一个元框,用于event_date 并且与此帖子类型关联的所有帖子都按以下方式排序event_date. 我在循环中有一个特殊的条件来查询event_date 已经发生了-在这种情况下,它没有显示,但只列在我的档案中。就像你可以使用wp_list_categories() 我编写了一个自定义函数,它以完全相同的方式列出所有分类术语。现在