お世話になっております。
Advanced Custom Fieldsのバージョンアップに伴い、パッチの修正を自前で行いましたのでご報告いたします。
同様の事象の方はテスト環境にて動作確認しつつ行うことをお勧めいたします。
– 利用状況 –
管理画面「商品マスター」にカスタムフィールドを追加して利用しています。
カスタムフィールドは「Advanced Custom Fields(以下, ACF)」プラグインの無料版(PROでない方)を使用しています。
使用に際してはコルネ(nanbu)さん提供のパッチを併用しています。
[ ACF ]
https://ja.wordpress.org/plugins/advanced-custom-fields/
[パッチ]
・無料版
https://www.welcart.com/community/wordpress/wp-content/uploads/2018/11/acf_form_welcart_item.1.1.zip
・PRO
https://www.welcart.com/archives/techinfo/techinfo-20200218
– 事象 –
ACFプラグインのバージョンを「5.8.11」から「5.9.1」に更新したところ、商品マスターの登録済みの商品画面からカスタムフィールドの入力枠が消えてしましました。
ただ「商品マスター」の「カテゴリー」蘭のチェックをつけたり、外したりすると表示されます。
予想ですが「新規商品追加」の時に「カテゴリー」蘭を操作することでカスタムフィールドを表示するjavascript(Ajax)が動作しているようです。
逆に既に登録済みの商品の場合はカスタムフィールドにデータがあるのでPHPにて読み出して表示するロジックがあるはずなので、何らかの問題が発生していると予想しました。
– 対応 –
自前のACFパッチを修正しました。
パッチ内で対象の記事(商品)にカスタムフィールドが紐づいているかの判定に「acf_get_field_group_visibility」を使用しているのですが、関数の仕様が変更されているようです。
引数に「post_id、post_type」を渡すのですが、以前は「post_type」が空でも有無を返していたようですが、プラグイン更新後は「post_type」を指定していないと「空:”」を返します。
パッチ内では「post_type」が取得できておらず、また途中で条件によって「post_type」をクリアしてしまうロジックがあるので、いずれにしてもカスタムフィールドが表示されません。
クリアしてしまうロジックの必要性は分からないのですが、ポストタイプの取得と格納するように変更しました。
——————————-
[ acf_form_welcart_item.php ]
// update vars
if( !empty($post) ) {
$this->post_id = $post->ID;
$this->typenow = $typenow;
}
↓86行目あたりの「$this->typenow = $typenow;」を修正
$typenow = $post->post_type;//ポストタイプの取得して変数に格納
$this->typenow = $typenow;//変数からポストタイプを設定
——————————-
// validate page (Shopp)
if( $pagenow == “admin.php” && isset( $_GET[‘page’] ) && $_GET[‘page’] == “usces_itemedit” && isset( $_GET[‘post’] ) ) {
$return = true;
$this->post_id = absint( $_GET[‘post’] );
$this->typenow = ”;
}
↓105行目あたりの「$this->typenow = ”;」を修正
$this->typenow = $typenow;
——————————-
[ おまけ ]
ちなみに商品マスター以外に利用している「カスタムフィールド」の枠にローダーが表示されてうるさい人は下記の修正で直ります。(と思います)
// add meta box
add_meta_box( $id, $title, array($this, ‘render_meta_box’), $this->typenow, $context, $priority, $args );
↓211行目あたりの「add_meta_box・・・」に条件をつけて下さい。
商品マスタに紐づいていないカスタムフィールドは表示しようとしないので「ローダー」も表示されません。
if($args[‘visibility’]){
add_meta_box( $id, $title, array($this, ‘render_meta_box’), $this->typenow, $context,
$priority, $args );
}
– 補足 –
PROは試していませんが同様の事象の場合は自己責任の中お試しください。
修正後にたいした検証をしていませんので訂正・補足等ありましたらこちらのトピックスに追記いたします。
ちなみにポストタイプをクリアの件と以下の判定が、何のためかわかる方がいらしたら解説していただけると助かります。
if( $pagenow == “admin.php” && isset( $_GET[‘page’] ) && $_GET[‘page’] == “usces_itemedit” && isset( $_GET[‘post’] ) )
——————————————-
WordPress のバージョン:5.5.1
Welcart のバージョン:1.9.32
PHP のバージョン:PHP7.3.16
ご利用のテーマ:panetteria の自作子テーマ
症状を確認したブラウザ:Safari、Chrome
サーバー:Xserver X10
SSLの利用:常時SSL
Advanced Custom Fieldsのバージョン:5.8.11→5.9.1更新時
——————————————–
以上