【WordPress】カスタムフィールドの値・キーを取得して表示する方法と、値を更新する方法

WordPress では、投稿や固定ページなどで「タイトル」や「本文」などの項目の他に、カスタムフィールドを使用することで、任意に項目を追加することが出来ます。

今回は、そのカスタムフィールドを扱うの関数の中で、値・キーを取得する関数と、カスタムフィールドを更新・追加する関数のまとめとなります。

また、カスタムフィールドを管理できるプラグイン「Advanced Custom Fields(ACF)」の関数については、以下のリンク先を参考にしてみてください。

get_post_meta関数

get_post_meta関数は、指定したカスタムフィールドの値を取得します。

値を取得

以下は、WordPressループ内でカスタムフィールドの値を取得して表示する例となります。

例では、現在の投稿にカスタムフィールドのキー「sample_field」の値があれば、その値を取得し出力します。

<?php
// カスタムフィールドの値を取得
$value = get_post_meta( get_the_ID(), 'sample_field', true );
// カスタムフィールドの値がある場合
if( $value ){ 
    echo $value;
}
?>

get_post_meta関数のパラメータ

以下、get_post_meta関数のパラメータとなります。

get_post_meta( $post_id, $key, $single );
$post_id(必須)
 カスタムフィールドの値を取得したい投稿のIDを指定。
$key(省略可)
取得したいカスタムフィールドのキー(フィールド名)を指定。省略した場合はすべてのキーの値を配列として返します。初期値は、''
$single(省略可)
true を指定した場合は、指定されたキーを持つ最初の値を返します。false または値を省略した場合は、指定されたキーを持つすべての値を配列で返します。初期値は、false

$post_idのパラメータだけを指定した場合には、指定した投稿に設定されているすべてのカスタムフィールドの値を配列として返します。

get_post_custom関数

get_post_custom関数は、指定した投稿のカスタムフィールドのキーと値を配列ですべて取得します。

この関数は、カスタムフィールドの値に単一の値が格納されている場合でも、配列の配列(多次元の配列)を返します。カスタムフィールドの値に配列が格納されている場合には、シリアライズされた値を返します。

キー・値をすべて取得

以下は、現在の投稿のカスタムフィールドのキー・値を、すべて取得し表示する例となります。また、キーに対して値が複数ある場合には最初の値を出力します。

<?php
// すべてのカスタムフィールドの情報を配列で取得
$fields = get_post_custom();
// カスタムフィールドの情報がある場合
if($fields){
	echo "<ul>";
	foreach ( $fields as $key => $value ) {
    	// _(アンダースコア)から始まるキー以外の場合
		if(!(preg_match( "/^_/", $key ))){ 
        // キーの最初の値を取得
        echo "<li>" .$key . "は" . $value[0] . "</li>"; 
		}
	}
	echo "</ul>";
}
?>

WordPressの管理画面では表示されないカスタムフィールドについて

なお、カスタムフィールドには、_(アンダースコア)から始まるキーもあるのですが、そのカスタムフィールドは、WordPressの管理画面では表示されていません。

get_post_custom関数では、そのようなカスタムフィールドの値も出力されてしまうため、上記例では_(アンダースコア)から始まるキーを正規表現で除外してあります。

_(アンダースコア)から始まるキーは、デフォルトで設定されているものや、カスタムフィールドを追加できるadd_post_meta関数などで作成できます。

get_post_custom関数のパラメータ

以下、get_post_custom関数のパラメータとなります。

get_post_custom( $post_id );
$post_id(省略可)
 取得したいカスタムフィールドの投稿のIDを指定。省略した場合は現在の投稿。

update_post_meta関数

update_post_meta関数は、指定したキーのカスタムフィールドの値を更新します。また、指定したキーがない場合には、新しいカスタムフィールドとして追加します。

値の更新、またはカスタムフィールドを追加

以下の例は、投稿IDが76の投稿に設定されているカスタムフィールドの中で、キー「key_01」の値を 「Steve」に更新します。

また、キー「key_01」がない場合には、新しいカスタムフィールドとして追加されます。

<?php update_post_meta( 76, 'key_01', 'Steve' ); ?>

update_post_meta関数のパラメータ

以下、update_post_meta関数のパラメータとなります。

update_post_meta( $post_id, $meta_key, $meta_value, $prev_value );
$post_id(必須)
カスタムフィールドを更新する投稿の IDを指定。
$meta_key(必須)
更新するカスタムフィールドのキー(フィールド名)を指定。
$meta_value(必須)
更新するカスタムフィールドの新しい値を指定。配列を指定するとシリアライズされて格納されます。
$prev_value(省略可)
更新したいカスタムフィールドの元の値を指定することで、その値のみ更新ができます。省略すると、パラメータ$meta_key で指定したキーを持つすべての値が更新されます。

カスタムフィールドを扱うその他の関数について

その他にもカスタムフィールドを扱う関数はあります。他の関数については、文末の参考サイトを確認してみてください。

セキュリティ対策として出力をエスケープ処理

また、今回の例では行っていませんが、カスタムフィールドのデータを出力する際に、データによってはセキュリティ対策としてエスケープ処理を行います。

エスケープ処理については、以下のリンク先を参考にしてみてください。

データ検証 - WordPress Codex 日本語版

参考サイトなど

コメント投稿コメント投稿欄を開く

コメントは項目欄(*は必須項目)を入力し、「コメントを送信」ボタンをクリックしてください。 (メールアドレスは公開されることはありません。コメントの公開は承認制となります。)

また、多忙によりコメントには返信できない場合があります。

Twitterで返信する場合はこちらから。