如何为自定义帖子类型生成随机数字弹头?

时间:2014-11-30 作者:rey

我有以下PHP代码来生成一个随机数字字符串:

function generateRandomString($length = 12)
{
    global $generatedStrings;
    $characters = \'0123456789\';
    $randomString = \'\';
    for ($i = 0; $i < $length; $i++) {
        $randomString .= $characters[rand(0, strlen($characters) - 1)];
    }
    if (isset($generatedStrings[$randomString])) {
        $randomString = generateRandomString($length);
    }
    $generatedStrings[$randomString] = $randomString;
    return $randomString;
}

$generatedStrings = array();

foreach(range(1, 100000) as $num) {
    echo "\\n".$num."\\t : ".generateRandomString();
}
我想知道是否有人能帮我找出如何将这段代码与WordPress集成,以自动生成字符串作为自定义帖子类型的slug。

感谢您提供的任何指导!

2 个回复
SO网友:Hybrid Web Dev

function wpse_18293_get_random_string ($number_of_chars_to_use)  {

    $upper_case_charachters = range(\'A\', \'Z\');

    while($cnt < $number_of_chars_to_use) {
        $random_string.= $upper_case_charachters[mt_rand(0,    count($upper_case_charachters)-1)];
        $cnt++;
    } 
    return $random_string
}

$random_string = wpse_18293_get_random_string(\'10\');
“10”可以是任何数字,函数将传回一个随机字符字符串,该字符串的长度为多个字符。注意,函数名可以是您想要的任何名称,我这样命名是为了避免函数名冲突。

这样做的目的是迭代$number\\u of\\u chars\\u to\\u use number次,每个循环从$uppser\\u case\\u charachters中选择一个随机字符,并将其添加到字符串中。瞧,即时随机字符字符串。

值得注意的是,$upper\\u case\\u charachters只是一个充满字母的数组。如果需要数字,可以轻松地交换范围(“0”、“9”);

SO网友:birgire

下面是一个示例,说明如何自动生成数字段塞,而不是post ID:

/**
 * Auto generate numeric slugs for a given custom post type (via post.php screen)
 * Requires PHP 5.3+
 * @see http://wordpress.stackexchange.com/a/169907/26350
 */
add_action( \'load-post.php\', function(){
    add_filter( \'wp_insert_post_data\', function( $data, $postarr ) {
        if(
            \'post\' === $data[\'post_type\']   // <-- Edit the cpt to your needs!
            && empty( $data[\'post_name\'] )
            && isset( $postarr[\'post_ID\'] )
            && $postarr[\'post_ID\'] * 1 > 0
        )
        {
            //----------------------------------
            // Method with post ID reference (not random):
            //
            $data[\'post_name\'] = sprintf( \'%u\', crc32( $postarr[\'post_ID\'] ) );

            //----------------------------------
            // Method without post ID reference (random):
            //                 
            // $data[\'post_name\'] = rand( 10000000, 99999999 );        
        }
        return $data;
    }, 10, 2 );
});
您可以根据需要修改帖子类型。

这将在post.php 屏幕而不是post-new.php 屏幕

您可以轻松地测试crc32() PHP函数,post ID为1到100.000,使用下面的脚本answer. 我测试了100万次,没有任何碰撞。

请注意,如果不太可能发生的事情发生了,即您生成了以前存在的slug,那么WordPress将通过wp_unique_post_slug() 作用

希望您可以根据自己的需要进一步调整。

结束

相关推荐

post type slug vs page slug

我对我的永久链接有疑问,我想知道是否有人解决了这个问题。基本上我有一个名为videos 还有一个帖子类型名称videos, 因此,我尝试访问/视频,但我没有显示正确的内容。我可以保留视频作为我的页面slug,还可以保留视频/视频帖子类型链接吗???提前感谢。