2015
03/12

カスタムフィールドの値を置換するフィルターフック

カスタムフィールドの値をフィルターフックで一部置換してテンプレート内で使いたいと思い、方法を調べました。

ADs

やりたいこと

「my_meta_key」というフィールドに「1」と入っていたら、テーマ上では「あり」と表示させたい、ということをやりたいです。
カスタムフィールドをフラグとして使ったり、meta_queryで使いたいからカスタムフィールドは数字にしておきたいなど、利用頻度はまぁまぁあるのではないかと思います。

うまく動かない例

get_post_metaでカスタムフィールドの値を取得し、比較して置換すればよさそうですが以下のコードは上手く動きません。

get_post_metaは内部でget_post_metadata関数を実行しているため、フィルターフックが無限ループしてしまいます。

解決策:get_varで直接取得する

get_post_metadataを介さずカスタムフィールドの値を取得します。

以下の記事が参考になりました。

How to hook a filter to catch get_post_meta when alternate a custom field output?

記事中にremove_filter→get_post_meta→add_filterという回答もありますが、こちらは上手く動きませんでした。

おまけ:テンプレート側に書く場合

functions.phpじゃなくてテンプレート内に書く場合は以下のようになります。

これはこれで問題ないのですが(もっと短く書けるなど見直す点はありますが)、カスタムフィールドの表示箇所が複数ファイル複数箇所に散らばっているとめんどくさそうな感じがします。

フィルターフックによる処理が手っ取り早そうな場合は試してみてください。

ADs

Post Comments

メールアドレスが公開されることはありません。

Comments

コメントはまだありません。