web-dev-qa-db-ja.com

get_post_metaはブール値を返します(false)

私はテストをしていて、それがどこでうまくいかないかを見つけようとしていましたが、私はその部分にこだわっています。 get_post_meta() は、var_dump(get_post_meta(1))でテストされた私の値を何も返さないブール値(false).

Var_dump(get_post_meta(1、 'key_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.orgのダウンロードによって入手可能な最新のWordPressバージョンを使用する。


編集:追加情報が必要

コメントありがとうございます。私は単にadd_post_meta()とupdate_post_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)); 
?>

戻り値

// 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)

編集:追加情報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"] );
}
2

シリアル化されたデータが破損しているようです。クエリでフィールドを呼び出すと、このエラーが発生しました。シリアル化されたデータがブール値だけのデータで破損している場合、WordPressはエラーを返しません(false)。

これを解決するには、base64_encode()にシリアル化されたデータを挿入/更新し、base64_decode()で呼び出します。これはうまくいくようで、データは関数から再び呼び出すことができます。


自分のために小さな機能を書いた

たぶん同じ問題を抱えている誰かがいる、私はチェックするためにこの小さな機能を書きました。

<?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.");
    }
}
1