私は投稿が作成されたときにランダムなスラグを生成する関数を作成しようとしました。私は、この関数が一意ではない文字列をスラッグとして生成することを少し心配しています。どうすればこれを解決できますか?
関数は以下のようになります。
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;
}
}
このプラグインは、うまくいくはずです。 http://wordpress.org/extend/plugins/wp-hashed-ids/
関数 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'
で終わります、それであなたがそれを好まなければあなたはまだ戻り値を調整することができます。