下面是一个示例,说明如何自动生成数字段塞,而不是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()
作用
希望您可以根据自己的需要进一步调整。