web-dev-qa-db-fra.com

générer un slug unique lors de l'insertion d'un post

Comment puis-je créer un slug unique tout en insérant un nouveau message ..

Je sais que je peux interroger les messages et comparer les enregistrements pour créer un slug unique, mais

Je veux insérer un message avec slug unique en même temps.

Disons que j'ai le titre du post et les données nécessaires pour le post et que je veux l'insérer avec wpquery Wordpress a-t-il une fonction à manipuler tout seul ..

Quand j'insère un post avec st. comme

$my_post = array(
  'post_title'    => 'My post',
  'post_content'  => 'This is my post.',
  'post_status'   => 'publish',
  'post_author'   => 1,
  'post_category' => array(8,39)
);

// Insert the post into the database
wp_insert_post( $my_post );

Est-ce qu'il gère la limace automatiquement ..

Je veux insérer ce message et l'ouvrir avec la redirection php après l'insertion.

2
kutlus

Vous n'avez pas à y penser - WordPress s'en occupera.

Jetons un coup d'œil à wp_insert_post code source ...

En ligne 3203 vous trouverez:

if ( empty($post_name) ) {
    if ( !in_array( $post_status, array( 'draft', 'pending', 'auto-draft' ) ) ) {
        $post_name = sanitize_title($post_title);
    } else {
        $post_name = '';
    }
} else {
    // On updates, we need to check to see if it's using the old, fixed sanitization context.
    $check_name = sanitize_title( $post_name, '', 'old-save' );
    if ( $update && strtolower( urlencode( $post_name ) ) == $check_name && get_post_field( 'post_name', $post_ID ) == $check_name ) {
        $post_name = $check_name;
    } else { // new post, or slug has changed.
        $post_name = sanitize_title($post_name);
    }
}

Donc, si aucun post_name n'est défini, WP le générera à partir de post_title.

Et puis en ligne 3325 :

   $post_name = wp_unique_post_slug( $post_name, $post_ID, $post_status, $post_type, $post_parent );

Donc, WP prendra en charge l'unicité de post_name.

2

WordPress prendra soin de slug unique. Si vous souhaitez rediriger vers le message après sa création, vous pouvez obtenir le lien permanent en utilisant l'ID de message qui est renvoyé par wp_insert_poost() s'il a réussi:

$my_post = array(
  'post_title'    => 'My post',
  'post_content'  => 'This is my post.',
  'post_status'   => 'publish',
  'post_author'   => 1,
  'post_category' => array(8,39)
);

// Insert the post into the database
$post_id = wp_insert_post( $my_post );

// Check there was no errors
if( $post_id && ! is_wp_error( $post_id ) ) {

    wp_redirect( get_the_permalink( $post_id ) );
    exit;

}
1
cybmeta