getArgument('loop')) { $this->createMultipleSearchBoxes($class->getArgument('loop'), $class); } else { $optionId = self::getOptionId($class); $value = get_option($optionId)[$class->getId()]; $this->createSearchBox($class, null, $value); } } /** * @param array $loop * @param SettingsFieldArguments $class * * @throws Exception */ public function createMultipleSearchBoxes(array $loop, SettingsFieldArguments $class): void { foreach ($loop as $id => $human) { $value = null; $newClass = clone $class; $optionId = self::getOptionId($newClass); $optionValue = get_option($optionId)[$newClass->getId()]; printf('

%s:

', $human); if (array_key_exists($id, $optionValue)) { $value = $optionValue[$id]; } $newClass->setId($optionId . '_' . $id); $this->createSearchBox($class, $id, $value ?? []); } } /** * Shipping method search callback. * * @param SettingsFieldArguments $class * @param string|null $id * @param $value */ public function createSearchBox(SettingsFieldArguments $class, ?string $id, $value): void { $args = $class->getArguments(); printf( '"; } /** * @param SettingsFieldArguments $class * * @return string|null */ private static function getOptionId(SettingsFieldArguments $class): ?string { preg_match('/(\w+)\[/', $class->getName(), $matches); if (!isset($matches[1])) { return $class->getName(); } return $matches[1]; } }