*/ private function map( $scope ) { if ( 'site' === $scope ) { $map = get_option( self::META_KEY, array() ); } else { $map = get_user_meta( get_current_user_id(), self::META_KEY, true ); } return is_array( $map ) ? $map : array(); } /** * Write the whole map for a scope. * * @param string $scope `user` | `site`. * @param array $map Map. * @return void */ private function save( $scope, array $map ) { if ( 'site' === $scope ) { update_option( self::META_KEY, $map, false ); } else { update_user_meta( get_current_user_id(), self::META_KEY, $map ); } } /** {@inheritDoc} */ public function get( $scope, $key, $fallback = null ) { $map = $this->map( $scope ); return array_key_exists( $key, $map ) ? $map[ $key ] : $fallback; } /** {@inheritDoc} */ public function set( $scope, $key, $value ) { $map = $this->map( $scope ); $map[ $key ] = $value; $this->save( $scope, $map ); } /** {@inheritDoc} */ public function delete( $scope, $key ) { $map = $this->map( $scope ); unset( $map[ $key ] ); $this->save( $scope, $map ); } }