【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 で指定したキーを持つすべての値が更新されます。
カスタムフィールドを扱うその他の関数について
その他にもカスタムフィールドを扱う関数はあります。他の関数については、文末の参考サイトを確認してみてください。
セキュリティ対策として出力をエスケープ処理
また、今回の例では行っていませんが、カスタムフィールドのデータを出力する際に、データによってはセキュリティ対策としてエスケープ処理を行います。
エスケープ処理については、以下のリンク先を参考にしてみてください。