Aggiornare Post Slug Con Query e Script PHP

Pubblicato da Davide Tommasin

Come ricostruire i permalink se lo slug dei singoli post se questo non esiste?

Iniziando a fare un po di luce vado a spiegare una situazione in cui mi sono ritrovato.

Tempo fa ho dovuto passare 4 anni di contenuti e news da un database creato su misura importandoli attraverso varie query nella struttura del database di WordPress, visto che nella nuova versione del sito avevo concordato con il Cliente di utilizzare WordPress per vari motivi.

Dopo aver messo online il sito ed attivato i permalink su WordPress, ecco che qualche tempo dopo i tool per webmaster di Google mi segnalavano che c’era un buon 80% di link che indirizzavano sulla pagina 404 ovvero risorsa non trovata.

Dopo una rapida occhiata al database di WP, precisamente alla tabella wp_posts, mi sono accorto che proprio quel’ 80% dei post avevano il campo post_name vuoto.

NOTA: il post_name è il campo che permette la creazione del link per raggiungere un certo post e se questo campo è vuoto il permalink a quel dato post risulterà errato e redirezionerà appunto a una pagina 404.

Mi sono accorto che c’ erano più di 2 migliaia di articoli e news con il campo nullo e iniziare a manina a passarmi uno per uno a personalizzare lo slug sarebbe stato una cosa da pazzi ed ecco che mi viene in soccorso uno script php che si interfaccia al database, va in cerca di tutti i post con il campo post_name nullo, cioè vuoto, e lo riempie automaticamente… in meno di 1 secondo ho ripristinato la situazione e l’ indicizzazione su Google è tornata alla normalità.

Prima di utilizzare lo script seguente accertati di avere il BACKUP del database per evitare spiacevoli inconvenienti.

Ecco lo script php da richiamare attraverso il browser:

<?php
$dbhost = 'localhost';
$dbuser = 'utente';
$dbpass = 'password';
$dbname = 'nome_database';

$sql = 'SELECT ID, post_title
 FROM wp_posts
 WHERE post_status = "publish"
 and post_name = " "
 order by ID asc';

$db = mysql_connect($dbhost, $dbuser, $dbpass) or die('Could not connect: ' . mysql_error());
mysql_select_db($dbname);

$result = mysql_query($sql) or die('Query failed: ' . mysql_error());
while($row = mysql_fetch_array($result, MYSQL_ASSOC))
{
 $id = $row['ID'];
 $title = $row['post_title'];

 $title = trim($title);
 $title = strtolower($title);
 $title = str_replace(" ", "-", $title);
 $title = ereg_replace("[^a-z0-9-]", "", $title);
 $title = ereg_replace("[-]+", "-", $title);

 echo "ID :{$row['ID']} <br>" .
 "post_title : {$row['post_title']} <br>" .
 "post_title : {$title} <br>";

 $sql_u = 'UPDATE `wp_posts` SET post_name = "' . $title .'"'
 .'WHERE ID = ' . $id;
 echo '<br>'.$sql_u;
 mysql_query($sql_u) or die('Query failed: ' . mysql_error());
}

mysql_close($db);

?>

Pubblicato in Tutorial & How To
blog comments powered by Disqus

Twitter

Seguici Themes Free e PRO

@KING_Hack Template Free e PRO per WordPress

Newsletter CMS Italia

Your email:

 

Servizi Web e Hosting SEO

Hai bisogno di consulenza e supporto per personalizzare un template per WordPress? Puoi contattarci per chiederci consulenza sul web design.

hosting

Hai bisogno di Hosting? Possiamo offrirti spazio e servizi web per WordPress.