is_author() && $query->query_vars['author_name'] != '' ) { // Check for character(s) representing a hexadecimal digit if ( ctype_xdigit( $query->query_vars['author_name'] ) ) { // Get user by the decrypted user ID $user = get_user_by( 'id', $this->decrypt( $query->query_vars['author_name'] ) ); if ( $user ) { $query->set( 'author_name', $user->user_nicename ); } else { // No user found $query->is_404 = true; $query->is_author = false; $query->is_archive = false; } } else { // No hexadecimal digit detected in URL, i.e. someone is trying to access URL with original author slug $query->is_404 = true; $query->is_author = false; $query->is_archive = false; } } return; } /** * Replace author slug in author link to encrypted value. Used by author_link filter. * * @link https://plugins.trac.wordpress.org/browser/smart-user-slug-hider/tags/4.0.2/inc/class-smart-user-slug-hider.php * @since 2.1.0 */ function alter_author_link( $link, $user_id, $author_slug ) { $encrypted_author_slug = $this->encrypt( $user_id ); return str_replace ( '/' . $author_slug, '/' . $encrypted_author_slug, $link ); } /** * Replace author slug in REST API /users/ endpoint to encrypted value. Used by rest_prepare_user filter. * * @link https://plugins.trac.wordpress.org/browser/smart-user-slug-hider/tags/4.0.2/inc/class-smart-user-slug-hider.php * @since 2.1.0 */ function alter_json_users($response, $user, $request) { $data = $response->get_data(); $data['slug'] = $this->encrypt($data['id']); $response->set_data($data); return $response; } /** * Helper function to return an encrypted user ID, which will then be used to replace the author slug. * * @link https://plugins.trac.wordpress.org/browser/smart-user-slug-hider/trunk/inc/class-smart-user-slug-hider.php * @since 2.1.0 */ private function encrypt( $user_id ) { // Returns encrypted encrypted author slug from user ID, e.g. encrypt user ID 3 to author slug 4e3062d8c8626a14 return bin2hex( openssl_encrypt( base_convert( $user_id, 10, 36 ), 'DES-EDE3', md5( ASENHA_URL ), OPENSSL_RAW_DATA ) ); } /** * Helper function to decrypt an (encrypted) author slug and returns the user ID * * @link https://plugins.trac.wordpress.org/browser/smart-user-slug-hider/trunk/inc/class-smart-user-slug-hider.php * @since 2.1.0 */ private function decrypt( $encrypted_author_slug ) { // Returns user ID, e.g. decrypts author slug 4e3062d8c8626a14 into user ID 3 return base_convert( openssl_decrypt( pack('H*', $encrypted_author_slug), 'DES-EDE3', md5( ASENHA_URL ), OPENSSL_RAW_DATA ), 36, 10 ); } }