我试图创建一个函数,在创建帖子时生成一个随机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;
}
}
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\'
, 因此,如果不喜欢,仍然可以调整返回值。