- ステータス
- 解決済み
- 報告対象
- Advanced Custom Fields Multilingual 2.0.3
- 解決されたバージョン
- 2.0.4
- 関連するプラグイン/テーマ
- Advanced Custom Fields (ACF)
- トピックタグ
- Bug
問題の概要
Advanced Custom Fields Proを使用し、タクソノミーフィールドを含むテーマオプションを保存すると、以下の致命的なエラーが発生します。
PHP Fatal error: Uncaught Error: Cannot use object of type WP_Term as array in …\wp-content\plugins\acfml\classes\strategy\repeater-shuffle\OptionsPage.php:89Stack trace:
#0 …\wp-content\plugins\acfml\classes\strategy\repeater-shuffle\OptionsPage.php(75): ACFML\Repeater\Shuffle\OptionsPage->addNormalizedValuesForFieldState(Array, '', ‘my_taxo_term’, Object(WP_Term))
…\plugins\acfml\classes\class-wpml-acf-field-state.php(57): ACFML\Repeater\Shuffle\OptionsPage->getAllMeta('options’)
…\plugins\acfml\classes\class-wpml-acf-field-state.php(41): ACFML\FieldState->getCurrentMetadata('options’)
…\class-wp-hook.php(308): ACFML\FieldState->storeStateBefore('options’)
…\class-wp-hook.php(332): WP_Hook->apply_filters(NULL, Array)
…\plugin.php(517): WP_Hook->do_action(Array)…
回避策
続行する前に、サイトの完全なバックアップを作成してください。
- …/wp-content/plugins/acfml/classes/strategy/repeater-shuffle/OptionsPage.phpファイルを開きます。
- 88行目を探します。
- 以下を:
private function addNormalizedValuesForFieldState( $options, $prefix, $key, $value ) { if ( $value instanceof WP_Post || isset( $value['ID'] ) ) { return array_merge( $options, [ "${prefix}${key}" => Obj::prop( 'ID', $value ) ] ); } elseif ( $this->isArrayOfStrings( $value ) ) { return array_merge( $options, [ "${prefix}${key}" => $value ] ); } elseif ( is_array( $value ) ) { foreach ( $value as $index => $item ) { if ( is_numeric( $index ) ) { foreach ( $item as $field => $field_value ) { $options = array_merge( $options, $this->addNormalizedValuesForFieldState( $options, "${prefix}${key}_${index}_", $field, $field_value ) ); } } else { $options = $this->addNormalizedValuesForFieldState( $options, "${prefix}${key}_", $index, $item ); } } return $options; } else { return array_merge( $options, [ "${prefix}${key}" => $value ] ); } }次のように置き換えます:
private function addNormalizedValuesForFieldState( $options, $prefix, $key, $value ) { if ( $value instanceof WP_Post || is_array($value) && isset( $value['ID'] ) ) { return array_merge( $options, [ "${prefix}${key}" => Obj::prop( 'ID', $value ) ] ); } elseif ( $value instanceof WP_Term || isset( $value->term_id ) ) { return array_merge( $options, [ "${prefix}${key}" => Obj::prop( 'term_id', $value ) ] ); } elseif ( $this->isArrayOfStrings( $value ) ) { return array_merge( $options, [ "${prefix}${key}" => $value ] ); } elseif ( is_array( $value ) ) { foreach ( $value as $index => $item ) { if ( is_numeric( $index ) ) { foreach ( $item as $field => $field_value ) { $options = array_merge( $options, $this->addNormalizedValuesForFieldState( $options, "${prefix}${key}_${index}_", $field, $field_value ) ); } } else { $options = $this->addNormalizedValuesForFieldState( $options, "${prefix}${key}_", $index, $item ); } } return $options; } else { return array_merge( $options, [ "${prefix}${key}" => $value ] ); } }