WordPressの投稿メタへ配列を保存する。ユーザーID一覧を扱う最小例

CODE 10 投稿メタへユーザーID配列を保存・取得する流れ

WordPressでは、投稿ごとに追加情報を保存できます。例えば社内ポータルで「このお知らせを確認してほしいユーザー」を管理する場合、対象ユーザーが複数人ならIDの一覧を扱う必要があります。

今回は投稿メタ(post meta)を使って、ユーザーIDの配列を保存・取得する基本を学びます。ここで扱うコードは最小例であり、MANIARUの本番サイトでは実行していません。

投稿メタとは?

投稿メタは、WordPressの投稿に付けられる追加情報です。投稿タイトル・本文・公開日以外の情報も保存できます。例えば、確認対象ユーザーID、お知らせの管理番号、業務フローの状態などです。データはメタキーと値の組で管理します。

今回はメタキーを_maniaru_target_user_idsとします。先頭のアンダースコアは内部管理用項目として区別する際の慣習です。これだけで秘密情報になるわけではありません。

配列とは?

PHPでは、複数の値をまとめて扱うために配列を使います。

$user_ids = [3, 7, 12];

3、7、12は説明用の架空のユーザーIDです。

投稿メタに配列を保存する

WordPressのupdate_post_meta()を使います。

$post_id = 123;
$user_ids = [3, 7, 12];

update_post_meta(
    $post_id,
    '_maniaru_target_user_ids',
    $user_ids
);
コード意味
$post_id保存先の投稿ID
$user_ids保存したいユーザーIDの配列
update_post_meta()投稿メタを追加・更新する関数
_maniaru_target_user_idsデータを識別するメタキー

WordPressは必要に応じて配列をシリアライズして保存するため、この基本例でJSON文字列へ変換する必要はありません。

保存した配列を取得する

保存したデータはget_post_meta()で取得できます。

$post_id = 123;
$user_ids = get_post_meta(
    $post_id,
    '_maniaru_target_user_ids',
    true
);

第3引数trueは単一のメタ値を取得する指定です。配列を1つ保存した場合、取得結果を配列として扱えます。

if (is_array($user_ids)) {
    foreach ($user_ids as $user_id) {
        echo esc_html((string) $user_id);
        echo '<br>';
    }
}

これは説明用の表示例です。実運用でユーザーIDを公開ページに表示しないようにしてください。

どこで実行する?

PHPコードはWordPressのPHP実行環境で動かします。投稿本文の「カスタムHTML」ブロックに貼っても実行されません。検証用WordPressの独自プラグインなどに配置し、123を実在するテスト投稿IDへ置き換えます。

本番で更新処理を組み込む際は、権限・入力値・処理タイミングの確認が必要です。

入力値を整える

$user_ids = [3, '7', 7, 12];
$user_ids = array_map('absint', $user_ids);
$user_ids = array_values(array_unique($user_ids));

数値文字列を整数へ変換し、重複IDを除去できます。ただし、これだけではユーザーの実在や操作権限を検証できません。

ユーザー情報とは別物

投稿メタに保存するのはユーザーそのものではなく、ユーザーを参照するID一覧です。名前やメールアドレスを複製する必要はありません。また、投稿メタに保存しただけで通知やアクセス制御が実現するわけではありません。

実制作とのつながり

MANIARUのPROJECT 002 STEP 09「社内ポータルに業務フローを作る」では、社内ポータルのユーザー管理や業務フローを整理しました。複数ユーザーを対象とする機能のデータ構造を理解するための基本例です。このコードを本番サイトで実行したという記録ではありません。

まとめ

PHP配列で複数IDをまとめ、update_post_meta()で保存し、get_post_meta()で取得できます。保存方法と安全な業務システムへの組み込みは別です。まず最小例で理解し、次に権限管理と入力検証を組み合わせましょう。