it-swarm.com.de

So generieren Sie automatisch einen zufälligen Slug

Ich habe versucht, eine Funktion zu erstellen, die beim Erstellen eines Posts einen zufälligen Slug generiert. Ich mache mir ein bisschen Sorgen, dass die Funktion nicht eindeutige Zeichenfolgen als Slugs generiert. Wie kann ich das lösen?

Die Funktion sieht folgendermaßen aus:

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

Ich habe dieses Plugin gefunden, das den Trick machen sollte: http://wordpress.org/extend/plugins/wp-hashed-ids/

2
Erikm

Verwenden Sie die Funktion wp_unique_post_slug() . Das Rad nicht neu erfinden, das ist ziemlich knifflig.

Verwendungszweck:

$unique_slug = wp_unique_post_slug( 
    $slug,
    $post_ID, 
    $post_status,
    $post_type, 
    $post_parent 
);

Dann können Sie $slug === $unique_slug testen und einen neuen generieren, wenn der Test fehlschlägt.

Sie finden die Funktion in wp-includes/post.php. Es endet mit einem Filter 'wp_unique_post_slug', sodass Sie den Rückgabewert immer noch anpassen können, wenn Sie ihn nicht mögen.

5
fuxia