如何自动生成唯一的随机弹

时间:2012-11-26 作者:Erikm

我试图创建一个函数,在创建帖子时生成一个随机slug。我有点担心函数会生成非唯一字符串作为段塞。我如何解决这个问题?

该函数如下所示:

add_filter(\'name_save_pre\',\'unique_slug\', 0);

function random_string() {
    $length = 6;
    $characters = "0123456789abcdefghijklmnopqrstuvwxyz";
    $string = \'\';    
    for ($p = 0; $p < $length; $p++) {
        $string .= $characters[mt_rand(0, strlen($characters))];
    }
    return $string;
}

function unique_id($slug) {
    global $wpdb;

    return $wpdb -> get_row("SELECT ID FROM wp_post WHERE post_name = \'" . $slug . "\' && post_status = \'publish\' && post_type = \'post\'");   
}

function unique_slug($slug) {
    if($slug) return $slug;

    $random_slug = random_string();
    if(!unique_id($random_slug)){
        //what to do here?
    }
    else {
        return $random_slug;
    }
}

3 个回复
最合适的回答,由SO网友:Erikm 整理而成

我找到了这个插件,它应该可以做到这一点:http://wordpress.org/extend/plugins/wp-hashed-ids/

SO网友:fuxia

使用该功能wp_unique_post_slug(). 不要重新发明轮子,这是一个相当棘手的问题。

用法:

$unique_slug = wp_unique_post_slug( 
    $slug,
    $post_ID, 
    $post_status,
    $post_type, 
    $post_parent 
);
然后您可以测试$slug === $unique_slug 如果测试失败,则生成一个新的。

您可以在中找到函数wp-includes/post.php. 它以过滤器结束\'wp_unique_post_slug\', 因此,如果不喜欢,仍然可以调整返回值。

SO网友:arafat

这就是如何生成唯一的随机段塞。

function randomSlug() {
    $length = 5;
    $chars = \'abcdefghijklmnopqrstuvwxyz0123456789\';
    $slug = \'\';
    for ($i = 0; $i < $length; $i++) {
        $string .= substr( $chars, wp_rand( 0, strlen($chars) - 1 ), 1 );
    }
    return $slug;
}

function slugExists($slug) {
    global $wpdb;
    if($wpdb->get_var("SELECT post_name FROM $wpdb->posts WHERE post_name = \'$slug\'")) {
        return true;
    } else {
        return false;
    }
}

function uniqueRandomSlug() {
    do {
        $randomSlug = randomSlug();
        $slugExists = slugExists($randomSlug);
    } while ( $slugExists );

    return $randomSlug;
}

结束

相关推荐

Where do wordpress posts go?

我们的数据中心安装了wordpress,它管理公司网站中的所有内容。因此,我有一个在树状视图中可访问和可用的页面列表。我们也有兴趣将其作为公司网站的一部分发布到常规博客上。我不清楚如何做到这一点,但我注意到在最顶端的导航中有一个新的Posts选项。所以我创建了几个草稿帖子。然而,现在我找不到了。我找到了一段讨论保存草稿帖子的视频,但我的左手导航没有显示任何帖子链接。。。只有几页。所以我可以创建新的帖子,但不知道如何管理它们。非常感谢您的任何建议。