>> $groups_data */ public function update( string $post_type, array $groups_data ): bool { return update_option( self::option_name( $post_type ), self::sanitize( $groups_data ) ); } /** * @return string[] */ public function get_page_template_slugs( string $post_type ): array { return $this->values_of_type( $post_type, 'page_template' ); } /** * @return string[] */ public function get_conditional_tags( string $post_type ): array { return $this->values_of_type( $post_type, 'conditional_tag' ); } /** * @return string[] */ private function values_of_type( string $post_type, string $rule_type ): array { $stored = get_option( self::option_name( $post_type ), array() ); $values = array(); foreach ( is_array( $stored ) ? $stored : array() as $group_data ) { foreach ( (array) $group_data as $rule_data ) { if ( is_array( $rule_data ) && $rule_type === ( $rule_data['type'] ?? '' ) && '' !== ( $rule_data['value'] ?? '' ) ) { $values[] = (string) $rule_data['value']; } } } return $values; } private static function option_name( string $post_type ): string { return self::OPTION_PREFIX . sanitize_key( $post_type ); } /** * @param array>> $groups_data * * @return array>> */ private static function sanitize( array $groups_data ): array { $clean_groups = array(); foreach ( $groups_data as $group_data ) { $clean_rules = array(); foreach ( (array) $group_data as $rule_data ) { if ( ! is_array( $rule_data ) || ! isset( $rule_data['type'], $rule_data['value'] ) ) { continue; } $clean_rules[] = array( 'type' => sanitize_key( (string) $rule_data['type'] ), 'value' => sanitize_text_field( (string) $rule_data['value'] ), ); } $clean_groups[] = $clean_rules; } return $clean_groups; } }