Random Alphanumeric Key URLs

时间:2013-07-30 作者:user1960364

我需要随机(和唯一)字母数字永久对齐。我查看了几个插件,但它们似乎都会以某种形式重定向到更长的URL。这不是我想要的,我想要改变永久链接。

基本上,我想要像bit这样的URL。ly或9gag。com。

我已经看过了,但在我的搜索中发现是空的-是否存在这样的插件?如果没有,是否有人能为我指明正确的方向,告诉我如何完成这一目标?我在PHP方面相当自给自足,但我还不太熟悉WordPress。

我能想到的最简单的方法是add_filter("post_slug", md5(rand())) (如果这是实际有效的代码)。显然,我必须检查是否有重复的弹头,还有什么不。。。

老实说,我更喜欢的是:example.com/prefix/hf434g5ay/postname 在这方面/prefix/alphanumeric-key 是必需的,但postname用于SEO。

2 个回复
SO网友:kovshenin

如果你想为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。

希望这有帮助。

SO网友:Wyck

使用以下方法将随机段塞附加到帖子:

add_filter( \'wp_unique_post_slug\', \'unique_slug_108286\', 10, 4 );

function unique_slug_108286( $slug) {    
    $slug = mt_rand(); //just an example
    return $slug;
}
我很确定WP会使用这个过滤器来处理重复项(默认情况下是这样的),所以您不需要自己检查它们。

您可以在permalinks管理设置中手动添加前缀,方法是将其设置为/prefix/%postname%/

最好为前缀使用类别或自定义分类法。至于在postname之前设置随机slug,比如prefix/hf434g5ay/postname 我认为这需要使用http://codex.wordpress.org/Rewrite_API , 要做到这一点,创建一个自定义的帖子类型比破坏默认的“帖子”更容易。

结束

相关推荐

使用wp_reDirect和.htaccess重新路由搜索(并传递剩余的GET变量)

我想用wp_redirect() 将搜索重定向到我在中建立的格式.htaccess. 不幸的是,我在做这件事时遇到了一些问题。我需要将搜索重定向到一系列文件夹,然后将剩余参数附加到URL的末尾,最终结果如下所示:http://www.xxxxxxx.com/search/Used/MT/Billings/?s=BMW&z=59105&r=150&m=150000&pmin=1000&pmax=30000&submit=Refine 到目前为止,我