如果你想为SEO保留你的slug,那么你需要定义一个新的重写标记,并将默认行为保留为post slug。
如果您想要一个唯一的id,那么与其查找可能的重复id,为什么不直接重复使用post id呢?在给定MySQL主索引的情况下,post id保证是唯一的–如果您希望它看起来更像bitly,可以将其转换为base36数字。
add_action( \'init\', function() {
add_rewrite_tag( \'%my_id%\', \'([a-z0-9]+)\' );
});
add_action( \'pre_get_posts\', function( $query ) {
if ( ! $query->is_main_query() || is_admin() )
return;
$id = $query->get( \'my_id\' );
if ( ! empty( $id ) ) {
$query->set( \'p\', base_convert( $id, 36, 10 ) );
$query->set( \'name\', null );
}
});
add_filter( \'post_link\', function( $permalink, $post ) {
$id = base_convert( $post->ID, 10, 36 );
return str_replace( \'%my_id%\', $id, $permalink );
}, 10, 2 );
然后将永久链接结构更改为
/%my_id%/%postname%/
在设置-永久链接中。如果需要0-9个以上的小写字符,可以查找一些
base 62 实现,尽管我不太喜欢区分大小写的URL。
希望这有帮助。