web-dev-qa-db-ja.com

ランダムスラッグを自動的に生成する方法

私は投稿が作成されたときにランダムなスラグを生成する関数を作成しようとしました。私は、この関数が一意ではない文字列をスラッグとして生成することを少し心配しています。どうすればこれを解決できますか?

関数は以下のようになります。

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;
    }
}
4
Erikm

このプラグインは、うまくいくはずです。 http://wordpress.org/extend/plugins/wp-hashed-ids/

2
Erikm

関数 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'で終わります、それであなたがそれを好まなければあなたはまだ戻り値を調整することができます。

5
fuxia