ブルーシュ

IT技術の勉強記録

ホーム > Tips > WordPress

ACFのテキストデータを1行ずつ取り出して、PHPの配列に変換する

,

Gutenbergがあるのでこんな記事は不要かもしれませんが・・・
こちらの記事に関連して、今日はAdvanced Custom Fieldsのデータを1行ずつPHPの配列に変換してみます。

ACFの設定

ACFの設定画面
※一部項目を非表示にしています</figcaption >

フィールドタイプはテキストエリア、改行はなにもしないです。
入力方法を説明に書いておくと親切ですね。
1つずつ改行してください。と書いています。

データの入力

1行ずつ、区切って入力します。
見やすいように空白行を入れても大丈夫です。
ACFフィールドの入力画面

ソースコード

テンプレートファイルにはこのように書きます。

$field = get_field("ラーメン");

//連続した改行を取り除く
$field = preg_replace('/(\n|\r|\r\n)+/us',"\n",$field);

//配列に変換
$field = explode("\n", $field);

//1行ずつ処理
foreach($field as $i => $line): ?>

	<p class="ramen"><?php echo $line; ?></p>

<?php endforeach; ?>

画像と組み合わせる

こちらの記事(lightgallery.js編Swiper編)を応用して、画像と組み合わせることも可能です。
まずはlightgallery.js編を見て、Wysiwygエディタを設置してください。
Wysiwygフィールドを設置した場面

functions.phpに追加

下記の2つの関数をfunctions.phpに追加してください。

//改行で区切ったデータを入れると配列にして返す
function br2Arr($field){

	//連続した改行を取り除く
	$field = preg_replace('/(\n|\r|\r\n)+/us',"\n",$field);

	$field = explode("\n", $field);

	if($field){
		return $field;
	} else{
		return array();
	}
}

//wysiwygフィールドを入れると画像IDを取り出す
function getImgIds($field){
	$img_ids = array();
	preg_match_all( '/wp-image-([0-9]+)/', $field, $matches);
	if($matches) {
		$img_ids = $matches[1];
	}
	return $img_ids;
}

ソースコード

<?php

	$img_ids = getImgIds(get_field("画像"));

	$html = "";
	foreach(br2Arr(get_field("ラーメン")) as $i => $line){

		$attr = array("alt" => $line);

		$html .= "<p class='ramen'>" .
			wp_get_attachment_image($img_ids[$i], "thumbnail", 0, $attr) .
			"{$line}</p>";
	}
	echo $html;
?>

これで、ラーメン画像とテキストを並べて表示させることができます。

動作サンプル

煮干し醤油ラーメン煮干し醤油ラーメン

味噌とんこつラーメン味噌とんこつラーメン

比内地鶏の塩ラーメン比内地鶏の塩ラーメン

ACFのテキストデータを1行ずつ取り出して、PHPの配列に変換する #WordPress #ウェブデザイン #ウェブ制作 #WEBデザイン #WEB制作 #ACF #AdvancedCustomFields

作者の似顔絵

秋田市在住のプログラマーです。
プログラミングを始めて18年、まだまだ日々勉強。調べたことをブログにまとめていきます。
記事の感想・質問・間違い指摘などはツイッター ( @blooshcompany ) へお願いします。