サポート » 使い方全般 » update_post_meta()のパラメータに配列が使えない

6件の返信を表示中 - 1 - 6件目 (全6件中)
  • こんにちは、TKO_W さん。

    update_post_meta() 関数のパラメーターは以下のようになっています。

    /**
     * @param int    $post_id    Post ID.
     * @param string $meta_key   Metadata key.
     * @param mixed  $meta_value Metadata value. Must be serializable if non-scalar.
     * @param mixed  $prev_value Optional. Previous value to check before removing.
     *                           Default empty.
     * @return int|bool Meta ID if the key didn't exist, true on successful update,
     *                  false on failure.
     */
    update_post_meta( $post_id, $meta_key, $meta_value, $prev_value = '' );

    第二引数はカスタムフィールドのメタキーになり、第三引数がキーに対する値です。

    update_post_meta($post->ID, $Table[$m][$n], $_POST[$Table[$m][$n]]);

    ですと、第二引数がバリューになっているように思われます(たぶん)。つまり・・・

    get_post_meta( $post->ID, '1', false );

    で、保存した値が取得できると思われます(たぶん)。

    スレッド開始 TKO_W

    (@tko_w)

    KUCKLUさん、お返事ありがとうございます。

    第2引数に使っている配列要素$Table[$m][$n]はinputのname指定にも使っているカスタムフィールドの項目名ですので、バリューではないんですよね。

    <input> で入力したバリューは$_POST[‘カスタムフィールド名’]で取得できてるのですが、ここに配列要素に使おうとすると反映されないという症状です。

    確かにそうですよね。見当違いな回答で大変失礼いたしました。

    update_post_meta( $post->ID, $Table[$m][$n], '158953' );

    として保存した場合

    get_post_meta( $post->ID, $Table[$m][$n] );

    で取得できるけれども

    update_post_meta( $post->ID, $Table[$m][$n], array( 'forum' => '158953' ) );

    として保存した場合

    get_post_meta( $post->ID, $Table[$m][$n] );

    では取得できないということですよね。update_post_meta() の meta_value に配列を渡したとしても、通常は保存されるので、meta_key または get_post_meta() 関数を代入している変数から値の取り方に問題がある気がします。

    例えば、僕がよくやってしまうミスとしては、get_post_meta() 関数の第三引数の値のミスです。

    update_post_meta( $post->ID, $Table[$m][$n], array( 'forum' => '158953' ) );

    として保存し

    $Test = get_post_meta( $post->ID, $Table[$m][$n] );

    とした場合

    echo esc_html( $Test[0]['forum'] );

    で取得できます。

    $Test = get_post_meta( $post->ID, $Table[$m][$n], true );

    この場合は

    echo esc_html( $Test['forum'] );

    で取得できます。

    あとは、HTML の input タグの name 属性の指定方法をよく間違えます。checkbox の場合、name=”test[]” としないといけないところ、name=”test” としてしまうことがあります。

    そもそも、データベースに保存されていないとなりますと、他の原因になると思います。思いついたら追記いたします。

    またまた、見当違いな回答をしていた場合、申し訳ございません。

    スレッド開始 TKO_W

    (@tko_w)

    KUCKLUさん、ありがとうございます。

    update できていても、正しくgetできていない可能性もありますね。
    明日職場で確認してみます。

    と、ここで別の問題が気になってきました。
    参考にしたコードにならい、
    チェックボックスの値を保存する関数を定義して、
    その中で配列要素を呼び出そうとしているのですが、

    function my_box_save($post_id) {
      global $post;
      ...
      update_post_meta($post->ID, $Table[$m][$n], $_POST[$Table[$m][$n]]);
    }
    add_action('save_post', 'my_box_save');

    恥ずかしながらグローバル変数、変数のスコープという概念があることを今日知りました。
    配列$Tableは特にグローバル宣言しておりません。

    配列も関数のなかでグローバル宣言できるものなのでしょうか。
    もしくは関数のなかで再度、配列を定義しなおせば、
    認識してくれるのでしょうか。

    こちらも試してみたいと思います。

    <input> で入力したバリューは$_POST[‘カスタムフィールド名’]で取得できてるのですが、ここに配列要素に使おうとすると反映されないという症状です。

    と書かれていたのでスルーしていたのですが、$Table[$m][$n] と $_POST[$Table[$m][$n]] を var_dump() 関数に通した時、ご自身が想定した値になっていますでしょうか?

    function my_box_save($post_id) {
      var_dump( $Table[$m][$n] );
      var_dump( $_POST[$Table[$m][$n]] );
      exit;
    }
    add_action('save_post', 'my_box_save');

    var_dump() 関数のあとに、exit すれば、そこで処理が止まり値を確認できます。

    配列$Tableは特にグローバル宣言しておりません。

    ということは、my_box_save() 関数内で $Table を定義していない限り、$Table はエラーをはいているような気がするのですが・・・いかがでしょうか?

    スレッド開始 TKO_W

    (@tko_w)

    KUCKLUさん、
    var_dump()exitのペアでチェックしながら進めたところ、
    おかげさまで通りました!

    関数外で配列を定義しておいて、関数内で配列をglobal宣言したところ、

    update_post_meta($post->ID, $Table[$m][$n], $_POST[$Table[$m][$n]]);

    の記述で見事に反映されました。

    初心者にお付き合い頂き、感謝致します m(_ _)m

6件の返信を表示中 - 1 - 6件目 (全6件中)
  • トピック「update_post_meta()のパラメータに配列が使えない」には新たに返信することはできません。