loaded_extensions[ $class_name ] ) { $this->loaded_extensions[ $class_name ] = $this->has_one( $class_name, 'indexable_id', 'id' )->find_one(); } return $this->loaded_extensions[ $class_name ]; } /** * Enhances the save method. * * @return bool True on success. */ public function save() { if ( $this->permalink ) { $this->sanitize_permalink(); $this->permalink_hash = \strlen( $this->permalink ) . ':' . \md5( $this->permalink ); } if ( \is_string( $this->primary_focus_keyword ) && \mb_strlen( $this->primary_focus_keyword ) > 191 ) { $this->primary_focus_keyword = \mb_substr( $this->primary_focus_keyword, 0, 191, 'UTF-8' ); } return parent::save(); } /** * Sanitizes the permalink. * * @return void */ protected function sanitize_permalink() { if ( $this->permalink === 'unindexed' ) { return; } $permalink_structure = \get_option( 'permalink_structure' ); $permalink_parts = \wp_parse_url( $this->permalink ); if ( ! isset( $permalink_parts['path'] ) ) { $permalink_parts['path'] = '/'; } if ( \substr( $permalink_structure, -1, 1 ) === '/' && \strpos( \substr( $permalink_parts['path'], -5 ), '.' ) === false ) { $permalink_parts['path'] = \trailingslashit( $permalink_parts['path'] ); } $permalink = ''; if ( isset( $permalink_parts['scheme'] ) ) { $permalink .= $permalink_parts['scheme'] . '://'; } if ( isset( $permalink_parts['host'] ) ) { $permalink .= $permalink_parts['host']; } if ( isset( $permalink_parts['port'] ) ) { $permalink .= ':' . $permalink_parts['port']; } if ( isset( $permalink_parts['path'] ) ) { $permalink .= $permalink_parts['path']; } if ( isset( $permalink_parts['query'] ) ) { $permalink .= '?' . $permalink_parts['query']; } // We never set the fragment as the fragment is intended to be client-only. $this->permalink = $permalink; } }