参考:https://beltxman.com/2929.html
参考:https://wordpress.stackexchange.com/questions/73983/how-to-automatically-generate-a-unique-random-slug
对于wordpress,它自带的文章url固定连接可选样式有很多,带日期的,文章名,文章ID,但如果想要每一篇文章一个随机字符串的slug(别名,显示在url后面),就要自己动手了,如果你不理解那是怎样的,看看简书的文章详情页的url就知道了。
主题的function.php中加入下面的代码即可:
add_filter( 'wp_unique_post_slug', 'unique_slug_so_custmoer', 10, 6 ); function unique_slug_so_custmoer( $slug, $post_ID, $post_status, $post_type, $post_parent, $original_slug ) { $real_status = get_post_status($post_ID); if ($post_type == 'post' && in_array( $real_status, array( 'draft', 'pending', 'auto-draft' )) && empty(get_post_meta($post_ID,'unique_slug', true))) { $new_slug = so_custmoer_unique_post_slug('guid'); add_post_meta($post_ID, 'unique_slug', 1, true); return $new_slug; } else { return $slug; } } # From: https://stackoverflow.com function so_custmoer_unique_post_slug($col,$table='wp_posts'){ global $wpdb; // 一些在url中不好看的字符比如pqjyil0,在这里去除了 $str = 'abcdefhkmnorstuvwwxz2345678923456789234567892345678923456789'; $alphabet = str_split($str); $already_exists = true; do { $guidchr = array(); for ($i=0; $i<32; $i++) $guidchr[] = $alphabet[array_rand( $alphabet )]; $guid = sprintf( "%s", implode("", array_slice($guidchr, 0, 12, true)) ); // check that GUID is unique $already_exists = (boolean) $wpdb->get_var("SELECT COUNT($col) as the_amount FROM $table WHERE $col = '$guid'"); } while ( true == $already_exists ); return $guid; }
主要是利用了wordpress的内置函数wp_unique_post_slug来做文章。在wordpress尝试自动生成别名时,我们自定义了它,的时候会生成一个12位长度的随机字符串,作为这篇文章的别名,而且再你再次编辑,或者把文章变成草稿,编辑之后再发布,不会再生成新的slug,避免同一篇文章多次生成。
参考:https://zhuanlan.zhihu.com/p/183863245
短网址的一般结构,比如新浪的 SwuTjn,其中后端的一段6位字符串,就是用来唯一标记一条记录的ID。那么,使用什么算法,可以生成一条无重复的ID呢?
使用通用的做法,使用 0-9 A-Z a-z 一共62个字符,我们看使用hash键位数分别有多少种排列组合情况。
- 1位:pow(62,1) = 62 种
- 2位:pow(62,2) = 3844 种
- 3位:pow(62,3) = 238328 种
- 4位:pow(62,4) = 14776336 种
- 5位:pow(62,5) = 916132832 种
- 6位:pow(62,6) = 56800235584 种
一般情况下,6个字符,就足够使用了,共计568亿种可能。