page_value)) { continue; } $value = PageRepository::decode($row->page_value); if (! isset($value['menu_id']) || ! in_array((string) $value['menu_id'], $menuIds, true)) { continue; } $menus[] = ['menu_slug' => (string) $row->menu_slug, 'page_value' => $value]; foreach (self::optionNames($value) as $name) { $names[$name] = true; } } $missing = '__aop_missing__'; $options = []; foreach (array_keys($names) as $name) { $current = get_option($name, $missing); // An option that does not exist is not exported as false. if ($current !== $missing) { $options[$name] = $current; } } return [ 'aop_export_version' => self::VERSION, 'plugin_version' => Plugin::releaseVersion(), 'generated' => gmdate('Y-m-d\TH:i:s\Z'), 'menus_and_pages' => $menus, 'options' => (object) $options, ]; } /** * @return string[] The option names of the fields of a page value. */ public static function optionNames(array $pageValue): array { $names = []; foreach ($pageValue['pages'] ?? [] as $page) { foreach ($page['fields'] ?? [] as $field) { if (! empty($field['field_name'])) { $names[] = (string) $field['field_name']; } } } return $names; } }