WEBLOG

WordPress > サイト毎の設定

Advanced Custom Fields(PRO)の設定を固定化・自動化

Create:

Update:

Category:WordPressサイト毎の設定

Series:WordPressサイト毎の設定

[ Version.19 ]

概要

カスタムフィールドの設定。Advanced Custom Fields PROと連動しています。

入力欄の設定を固定化

入力欄の設定を行う際に以前は社内規定を設けていましたが、設定を強制的に固定化しています。

特に「返り値」の設定は、WordPress管理画面に毎度確認しなくても弊社規定になるようにしています。

これらは、functions.php に読み込まれるfunctions_setup.php に記述しています。

規定値

設定を統一するための弊社の規定値です。

  • テキストエリア:改行は「なにもしない」
  • ラジオボタン:返り値は「BOTH(valueとlabel)」
  • プルダウン:返り値は「BOTH(valueとlabel)」
  • チェックボックス:返り値は「BOTH(valueとlabel)」
  • 画像:返り値は「画像配列」
  • ギャラリー:返り値は「画像配列」
  • ファイル:返り値は「URL」
  • 投稿オブジェクト:返り値は「投稿ID」
  • 関連:返り値は「投稿ID」
  • デイトピッカー:返り値は「U(タイムスタンプ)」表示は「Y-m-d」
  • カラーピッカー:返り値は「Hex String(16進数の色番号)」

functions_setup.php

上記の規定を下記で強制化・固定化します。

const ACF_FIELDS = [
	'textarea' => [
		'new_lines' => '',
	],
	'radio' => [
		'return_format' => 'array',
	],
	'select' => [
		'return_format' => 'array',
	],
	'checkbox' => [
		'return_format' => 'array',
	],
	'image' => [
		'return_format' => 'array',
	],
	'gallery' => [
		'return_format' => 'array',
	],
	'file' => [
		'return_format' => 'url',
	],
	'post_object' => [
		'return_format' => 'id',
	],
	'relation' => [
		'return_format' => 'id',
	],
	'date_picker' => [
		'display_format' => 'Y-m-d',
		'return_format' => 'U',
	],
	'color_picker' => [
		'return_format' => 'string',
	],
];
foreach (ACF_FIELDS as $acf_name => $v) {
	add_filter('acf/load_field/type=' . $acf_name, function ($field) use ($v) {
		foreach ($v as $kk => $vv) {
			$field[$kk] = $vv;
		}
		return $field;
	});
}

年・月・年度のプルダウンを自動更新

年のプルダウンは、毎年1月1日に選択肢が変更になります。

その年を追加して、デフォルトにして・・。

これを自動で追加されるようにします。

functions.php には設定値のみ記載して functions_setup.php に記述しinclude。

functions.php

設定定数「ACF_AUTO」をfunctions.phpに記載します。

const ACF_AUTO = [
	'auto_year' => [
		'auto_year',
		//'xxx_year',
	],
	'auto_month' => [
		'auto_month',
		//'xxx_month',
	],
	'auto_nendo' => [
		'auto_nendo',
		//'xxx_nendo',
	],
];
include_once 'xxx/functions_setup.php';

プルダウンの選択肢を自動で変更したい「キー」をそれぞれの配列内に記載。

functions_setup.php

年のプルダウンは、2000年スタートにしていますが、サイトによっては変更する必要があるかもしれません。

その場合も $auto_year_start を書き換えるだけです。

if (defined('ACF_AUTO')) {
	foreach (ACF_AUTO as $k => $v) {
		if ($k === 'auto_year') {
			foreach ($v as $vv) {
				// 年 auto_year
				add_filter('acf/load_field/name=' . $vv, function ($field) {
					$field['choices'] = [];
					$auto_year_last = intval(date_i18n('Y')) + 1;
					$auto_year_start = 2000;
					for ($auto_year = $auto_year_last; $auto_year > $auto_year_start; $auto_year--) {
						$field['choices'][$auto_year] = $auto_year . '年';
					}
					$field['default_value'] = intval(date_i18n('Y'));
					return $field;
				});
			}
		} elseif ($k === 'auto_month') {
			foreach ($v as $vv) {
				// 月 auto_month
				add_filter('acf/load_field/name=' . $vv, function ($field) {
					$field['choices'] = [];
					for ($auto_month = 1; $auto_month <= 12; $auto_month++) {
						$field['choices'][sprintf('%02d', $auto_month)] = $auto_month . '月';
					}
					$field['default_value'] = strval(date_i18n('m'));
					return $field;
				});
			}
		} elseif ($k === 'auto_nendo') {
			foreach ($v as $vv) {
				// 年度 auto_nendo
				add_filter('acf/load_field/name=' . $vv, function ($field) {
					// reset choices
					$field['choices'] = [];
					$auto_nendo_last = intval(date_i18n('Y'));
					$auto_nendo_start = 2000;
					for ($auto_nendo = $auto_nendo_last; $auto_nendo > $auto_nendo_start; $auto_nendo--) {
						$field['choices'][$auto_nendo] = $auto_nendo . '年度';
					}
					$field['default_value'] = intval(date_i18n('n')) < 4 ? intval(date_i18n('Y')) - 1 : $auto_nendo_last;
					// return the field
					return $field;
				});
			}
		}
	}
}
pagetop
loading