JSON-LDをWordPressで出力するプラグインを作成中なのですが、カスタムフィールド情報を全件取る必要が出てきたのでいろいろ試してみました。
カスタムフィールドの値を取得する
カスタムフィールドの値はget_post_meta関数で取得できる。
「$post_id, $key, $single」の3つの引数がありますが、$post_idのみ渡すとその投稿にあるカスタムフィールドを全部取得することができます。
[php]
$custom = get_post_meta( $post_id);
[/php]
関数リファレンス/get post meta – WordPress Codex 日本語版
システム用のデータを排除する
これで全件取得が完了したかと思ったのですが、そういう時はだいたい落とし穴があるものですorz
取得したデータを見ると「’name’」と「’name’」のように(アンダーバー)付きの配列も混ざってます。
これはWordPressがシステム側で使うものらしいので、取得しないようにしたいと思います。
どうやらシステム側で使うものには「_」の接頭詞が付く様子なので、それをキーに処理すると良さ気でした。
[php]
$customAll = get_post_meta($post_id);
foreach($customAll as $key => $value){
if(substr($key,0,1) !== ‘_’){
$custom[$key] = $value;
}
}
[/php]
なーんとなくforeachよりもスマートな方法がある気がしますが、100件も500件も処理するわけではないのでとりあえず今回はこれで・・・
array系の関数で多分もっといいのありますよね?
オシエテエロイヒト
ブックマークや限定記事(予定)など
WP Kyotoサポーター募集中
WordPressやフロントエンドアプリのホスティング、Algolia・AWSなどのサービス利用料を支援する「WP Kyotoサポーター」を募集しています。
月額または年額の有料プランを契約すると、ブックマーク機能などのサポーター限定機能がご利用いただけます。
14日間のトライアルも用意しておりますので、「このサイトよく見るな」という方はぜひご検討ください。