*/ public function defaults(): array { /** * Filters the default settings. * * @param array $defaults Default settings. */ return (array) apply_filters( 'yangra_conditional_default_settings', array( 'show_visibility_badges' => true, 'admin_bar_preview' => true, ) ); } /** * Returns all settings merged with defaults. Saved keys that are no longer * settings (e.g. removed in an update) are left out. * * @return array */ public function all(): array { $defaults = $this->defaults(); $saved = get_option( self::OPTION, array() ); return array_merge( $defaults, array_intersect_key( is_array( $saved ) ? $saved : array(), $defaults ) ); } /** * Sanitizes and saves settings. Unknown keys are dropped. * * @param array $input Raw input. * @return array The saved settings. */ public function update( array $input ): array { $clean = $this->sanitize( $input ); update_option( self::OPTION, $clean, false ); return $clean; } /** * Sanitizes settings input against the defaults. * * @param array $input Raw input. * @return array */ public function sanitize( array $input ): array { $clean = $this->all(); // Only scalar values can be read as a boolean. Anything else keeps the saved value. foreach ( self::BOOLEAN_KEYS as $key ) { if ( isset( $input[ $key ] ) && is_scalar( $input[ $key ] ) ) { $clean[ $key ] = rest_sanitize_boolean( $input[ $key ] ); } } /** * Filters sanitized settings before they are saved. Use this to sanitize extra keys. * * @param array $clean Sanitized settings. * @param array $input Raw input. */ return (array) apply_filters( 'yangra_conditional_sanitize_settings', $clean, $input ); } }