たとえば、カスタム投稿タイプ(商品)の投稿ページに
ブロック:「商品」(iteminfo)
フィールド:メーカー(maker)・値段(price)
というカスタムブロックを作ってデータを入れた場合、
商品というカスタム投稿タイプのアーカイブページに、タイトルとアイキャッチと値段を表示させたい場合、カスタムブロックで登録した内容は、記事の「post_content」に「データ」で入れられるため、「データ」から値を引っ張る必要があります。
その方法。
まず、function.phpに以下を追加
function content_to_field( $fieldname = "", $blockname = ""){
$post_content = get_post_field('post_content', get_the_ID());
$pattern = '/<!-- wp:acf\/'.$blockname.' {"name":"acf\/'.$blockname.'","data":(.*?),"mode":"(.*?)"} \/-->/';
preg_match($pattern, $post_content, $matches);
$jsonString = $matches[1];
#echo $jsonString;
if (!empty($jsonString)) {
$block_data = json_decode($jsonString, true);
echo $block_data[$fieldname];
}
}
$fieldnameには取得したいフィールド名(例では「price」)、$blocknameには取得したい対象ブロック名(例では「iteminfo」)を入れるようにします。
表示側のテンプレートファイルには
<?php content_to_field($fieldname, $blockname);?>
と記述。つまり、例だと content_to_field(‘price’, ‘iteminfo’) と記述
懸念事項としては、今後開発とともに、post_contentsに収められるデータ形式が変わらないかということ。
$pattern = '/<!-- wp:acf\/'.$blockname.' {"name":"acf\/'.$blockname.'","data":(.*?),"mode":"(.*?)"} \/-->/';
が変わったらデータは空になりますので、空になってもある程度大丈夫なことにしか使いたくない……。
こちらのページをちゃんと読む必要があるなぁとは思っている。
コメントを残す