GET_POST_META返回bool(FALSE)

时间:2016-09-20 作者:Erik Kraijenoord

我一直在测试,试图找出哪里可能出了问题,但我被困在这一部分。The get_post_meta() 没有返回任何我的值,使用var\\u dump(get\\u post\\u meta(1))测试这似乎会返回它,但当访问该键var\\u dump(get\\u post\\u meta(1,“key\\u name”)时,它会返回bool(false)。

此外,以下方法对我不起作用,var\\u dump(get\\u post\\u meta(1,“key\\u name”,true));默认情况下,它为false,因此也选中了此选项。在我的数据库中,密钥100%存在,并且具有值,发送此密钥的ID也是正确的。

<?php 
    var_dump(get_post_meta(1));                // array(4)
    var_dump(get_post_meta(1,\'key_name\');      // array(1){[0]=>bool(false)}
    var_dump(get_post_meta(1,\'key_name\',true); // bool(false)
?>
WordPress在这方面有什么问题吗?或者我在这里遗漏了什么,我有大量的数据存储,这会是WordPress的问题吗?使用WordPress下载的最新版本。组织。

<小时>

Edit: More Information Required

谢谢你的评论。我只是简单地使用add\\u post\\u meta()和update\\u post\\u meta()。我不明白这一点,我每天都在使用它,但在我的任何代码中都没有见过这种情况。在管理部分中,它可以正常工作,没有任何问题。代码:

<?php
    // $pID is 526660
    // Checked this with a diffrent var_dump
    var_dump(get_post_meta($pID));
    var_dump(get_post_meta($pID, \'agenda_postmeta\'));
    var_dump(get_post_meta($pID, \'agenda_postmeta\', true)); 
?>

Returns

// First var_dump
array(4) {
  ["agenda_postmeta"]=>
  array(1) {
    [0]=>
    string(843) "(serialized data string, hide this for privacy reasons on my comment)"
  }
  ["agenda_date"]=>
  array(1) {
    [0]=>
    string(10) "2016-10-08"
  }
  ["agenda_location"]=>
  array(1) {
    [0]=>
    string(17) "Jaarbeurs Utrecht"
  }
  ["agenda_city"]=>
  array(1) {
    [0]=>
    string(7) "Utrecht"
  }
}

// Second var_dump
array(1) {
  [0]=>
  bool(false)
}

// Third var_dump
bool(false)
<小时>

Edit: Extra Information add/update postmeta

下面是用于将其保存到我的数据库的代码,它之所以有效是因为数据库有它的键/值。

Database values by post_id

// Check for update or add
if( $has_id != 0 )
{
    update_post_meta( $post_id, \'agenda_postmeta\', $postmeta );
    update_post_meta( $post_id, \'agenda_date\', date("Y-m-d", strtotime($_POST["party_date"])) );
    update_post_meta( $post_id, \'agenda_location\', $_POST["party_location"] );
    update_post_meta( $post_id, \'agenda_city\', $_POST["party_city"] );
}
else {
    // If no posted_id available insert post_meta
    add_post_meta( $post_id, \'agenda_postmeta\', $postmeta );
    add_post_meta( $post_id, \'agenda_date\', date("Y-m-d", strtotime($_POST["party_date"])) );
    add_post_meta( $post_id, \'agenda_location\', $_POST["party_location"] );
    add_post_meta( $post_id, \'agenda_city\', $_POST["party_city"] );
}

1 个回复
SO网友:Erik Kraijenoord

显然,序列化数据已损坏,通过查询调用字段导致我出现此错误。当序列化数据损坏时,WordPress不会返回错误,只返回一个bool(false)。

通过在base64\\u encode()中插入/更新序列化数据并使用base64\\u decode()调用它,解决了这个问题。这似乎起到了作用,可以从函数中再次调用数据。

<小时>

Wrote a small functions for myself

也许有人有同样的问题,我写了这个小函数来检查。

<?php
function wpgz_post_meta( $post_id, $meta_key="", $base64_decode=false )
{
    if( intval($post_id) )
    {
         $post_meta = get_post_meta( $post_id, $meta_key, true );
         $post_meta = $base64_decode !== false ? base64_decode($post_meta) : NULL;

         $post_meta = explode(PHP_EOL, $post_meta);
         $post_meta = unserialize($post_meta[0]);

         if( is_array($post_meta) )
         {
             return $post_meta; 
         }
         else {

             send_page_notice("danger", "Invalid format", "Returned value is not a valid array.");
         }
     }
     else {

         send_page_notice("danger", "Invalid input", "The first value for this function should be an integer number.");
    }
}

相关推荐

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

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