Uno slug è una stringa creata a partire dal titolo di un post, di una pagina o di una categoria con lo scopo di ottenere una porzione di URL valida (cioè adatta a costituire un indirizzo web).

Uno slug è costituito da alcune parole con lettere minuscole separate da un trattino che prende il posto di eventuali spazi.

Gli slug sono utilizzati quando in Impostazioni>permalink abbiamo scelto una struttura personalizzata per gli url, ad esempio /%postname%/.

In questa situazione, la prima volta che salviamo un post, otteniamo un risultato simile a quello dell’immagine, dove lo slug generato è evidenziato in giallo.

post-slug

Se proviamo a inserire una categoria con più parole senza specificare l’abbreviazione otterremo un risultato analogo

slug-di-categoria

Creare uno slug utilizzabile in un / URL in php

sanitize_title() restituisce una stringa pronta per essere utilizzata come porzione di un / URL. Gli spazi del testo originario saranno sostituiti da trattini e i caratteri non consentiti saranno eliminati o sostituiti.

  • $title
    Testo originale
  • $fallback_title
    Testo da utilizzare se $title è vuato
  • $context
    operazione per cui viene creato lo slug

di default è ‘save’ (prepara per il salvataggio nel database). Altro possibile valore è ‘query’ (prepara per effettuare una query)

  $nuovo_url = sanitize_title( 'Titolo da trasformare in slug!' );
  echo $nuovo_url; // testo-da-trasformare-in-slug

Creare uno slug unico in php

wp_unique_post_slug() è la funzione che viene utilizzata durante la creazione di un nuovo post o una nuova pagina.

Vediamo come viene usata nel file wp-admin/icludes/post.php (Non modificare)

$post->post_name = sanitize_title($name ? $name : $title, $post->ID);

$post->post_name = wp_unique_post_slug($post->post_name, $post->ID, $post->post_status, $post->post_type, $post->post_parent);

Lo slug viene creato a partire dal titolo del post con sanitize_title()

Nella seconda riga viene verificato che non corrisponda ad altri titoli. In questo caso sarà inserito un suffisso (-2, -3 etc).

Accetta 5 parametri obbligatori.

  • $slug
    slug creato ad es con sanitize_title()
  • $post_ID
    id del post
  • $post_status
    non viene effettuto il controllo per verificare l’esclusività dello slug per le bozze e per gli articoli in attesa di revisione.
  • $post_type
    post type
  • $post_parent
    id del post genitore (nel caso delle pagine)

Personalizzare lo slug che viene creato automaticamente da wordpress

Modificare i file del core è sempre sconsigliato, quindi se vogliamo intervenire in qualche modo nello slug che viene creato bisogna cercare un hook apposito.

Se andiamo a vedere nel codice di wordpress (file wp-includes/post.php), dove viene creata la funizone wp_unique_post_slug vediamo che nell’ultima riga viene predisposto il filtro con lo stesso nome.

 return apply_filters( 'wp_unique_post_slug', $slug, $post_ID, $post_status, $post_type, $post_parent, $original_slug );

Siamo in grado di inserirci dunque nel codice al momento della creazione dell’url.

Come esempio proviamo ad aggiungere l’id del post all’indirizzo / URL di tutti gli articoli ($post_type = ‘post’)

//functions.php

add_filter( 'wp_unique_post_slug', 'custom_unique_post_slug', 10, 4 );

function custom_unique_post_slug( $slug, $post_ID, $post_status, $post_type ) {

	if ($post_type == 'post')
             $slug = $slug . '-' . $post_ID;

    return $slug;
}

  inStileWeb.com
blog comments powered by Disqus