「あさま」のあさましい(カスタムフィールドは頓挫)

先に申し上げておきます。
独自のカスタムフィールドを「あさま」テーマにインクルードしようとしたのですが、とーしても動作してくれずに開発が停止してます。(あさま開発サイトはこちら

いろいろと調べて、基本的な構成はちゃんと整っているはずなのですがダメなんです。世にあるハウトゥにある「あったりまえ」のところがちゃんとできない。(てか、ちゃんと存在しない。)もう、悔しくて(半べそかきながら)あれやこれや散々調べましたが、ついに一旦諦めて次の独自編集ブロックプラグインの開発(これはこれで難儀してます。)に進んでしまいました。

で、独自カスタムフィールドの紹介できないのです。でも、このブログは自らの忘備録を兼ねてますから、ことの顛末?をサラッとまとめておきます。
もしやしたら、解決策が転がり込んでることを期待してます。自分で気がつくのも含めて…。

カスタムフィールドは、ほかの機能と同様に子テーマの’functions.php’にあさまテーマのメインオブジェクト(’HustleClass.php’のインスタンス)ある関数’rgstCustomFieldSet’を参照する記述をします。
パラメータは多次元配列で、2次元目の連想配列の件数だけカスタムフィールドが登録できるようになっています。連想配列はWordpressの仕様に依ります。
以下、テストのカスタムフィールドです。大谷選手が43本目のホームランを打った頃だったようです。

$obj->rgstCustomFieldSet(array(
	//次の連想配列の件数だけカスタムフィールドを登録できる。
	array(
		'id' => 'customTextField',
		'ttl' => '大谷翔平選手の今季成績:カスタムフィールド(テキスト)',
		'pst' => ['asama_post'],
		'loc' => 'normal',
		'prty' => 'high',
		'typ' => 'text',
		'lbl' => [
			'legendLine'=>['注目の項目','成績内容',],
			'victoryOrDefeat'=>['勝敗','10勝5敗',true,],
			'battingAverage'=>['打率','.308',false,],
			'homeRun'=>['本塁打','43',false,],
			'runBattedIn'=>['打点','89',false,],
		],
	),
));

これでカスタムフィールド利用の下準備が済んで、あさまテーマの中で運用を開始します。
‘RegistrationClass.php’のインスタンスが初期化される際にフックを設定します。ページが開いたら関数’addCustomFields’を参照して準備されたカスタムフィールドを表示して利用できるようにし、入力操作などがあったら関数’saveCustomFields’を参照して保存するように仕込みます。

//カスタムフィールドを設置する。
add_action('add_meta_boxes', array($this, 'addCustomFields', 10, 2));
add_action('save_post', array($this, 'saveCustomFields', 10, 3));

編集画面にはつぎのようにフィールドが表示されます。

編集ページに表示されたカスタムフィールド

そんなに長くない記述の関数’addCustomFields’と’saveCustomFields’の定義は以下のとおりです。

public function insCutomTextFields($post,$args) {
	//nounceフィールドの追加
	wp_nonce_field('hustle_nonce_action', 'hustle_nonce_field');
	$ins = '<fieldset name="hustleFieldSet" >';
	foreach($args['args'] as $k=>$v) {
		// アンダースコアから始まるキー以外の場合
		if((preg_match( "/^_/", $k))) {
			$ins .= '<legend><span>'.esc_html($v[0]).'</span><span>'.esc_html($v[1]).'</span></legend>';
		} else {
			$ins .= '<label><span>'.esc_html($v[0]).'</span><input type="text" id="'.esc_html($k).'" name="'.esc_html($k).'" value="'.get_post_meta($post->ID, $k, true).'" size="" maxlength="" placeholder="'.esc_html($v[1]).'"></label>';
			$CustomFieldKeys[] = $k;
		}
	}
	$ins .= '</fieldset>';
	echo $ins;
}
public function saveCustomFields($pstID, $pst, $update) {
	//nonceがセットされているか確認
	if(!isset($_POST['hustle_nonce_field'])) return;
	//nounceが正しいか検証
	if(!wp_verify_nonce($_POST['hustle_nonce_field'], 'hustle_nonce_action')) return;
	if($update) {
		foreach($this->CustomFieldKeys as $v) {
			$this->HSTL->echoo('COSTOM_FIELD_NAME_>'.$v.'VALUE_>'.$_POST[$v]);
			if(!empty($_POST[$v])) {//入力の有無を確認
				update_post_meta($pID, $v, $_POST[$v]);//値を保存
			} else {
				update_post_meta($pstID, $v, '');//値を空に
			}
		}
	}
}

関数’addCustomFields’は全く問題がないようです。ところが、関数’saveCustomFields’で最初に参照される’$_POST’が空っぽで保存動作が進まないのです。

この’$_POST’はPHPのスーパーグローバル変数と言ってどこからでも参照できる変数なのです。呼べば来てくれるスーパーヒーローのはずですがあ…。ちゃんとフックがあって関数’saveCustomFields’が呼び出されて…、そのアーギュメントも揃っているにも関わらず…、スーパーヒーローは空っぽになってしまうのです。

どこで間違えたのかと、あさまテーマのオブジェクト群を使わずに’functions.php’に平たく書いてもダメでした。
もちろん、プラグインも切って、テーマをWordpessの’Twenty Twenty-Three’にしてもダメでした。

散々に調べてもエラーログを取っても、どうしてもスーパーヒーローはやってこない。ウェブ上のさまざまな情報では当たり前のように’$_POST’を参照している…、どうしたことか。
相当数に試行しました。時間もかかってしまいました。ついにはドメイン名が悪いとしか思えなくなるほどでした。

この原稿を書いていて、ふと、子テーマの’functions.php’だからいけないのかと思いましたが、そんなはずはない。
でも試すか。

そういったわけで独自カスタムフィールドの開発は、とりあえず停止することにしました。いろいろ調べたら、いつもなら情報元に感謝を示すのですが、それもできません。残念。
全く諦めたわけではありませんので、またそのうち再度検証してみたいと思います。
うーむ。やっぱ、意味ない投稿になったんじゃないかな。そかさ。