Salve a tutti,
sono nuovo e non molto esperto.
Sto passando da Xoops a Wordpress
Sto convertendo i dati e le vecchie tabelle in modo da essere compatibili con quelle wordpress.
Nella tabella wp_post c'è un campo post_name che con il vecchio CMS non avevo.
Il campo post_name non è alto che il titolo semplificato da usare con url rewriting. In pratica se il post ha il titolo "Ecco come farò a ..." il campo post name deve essere qualcosa tipo "ecco-come-faro-a".
Ho fatto una funzioncina per convertire il post_tite in post_name. La funzione è la seguente.
<?php
function generaTitoloSanato($titolo='') {
$titolo = strtolower($titolo);
$zio = array(
'Ì',
'Í',
'ß',
'ö',
'Ö',
' ',
'(',
')',
'%',
'+',
'&',
'.',
',',
':',
'/',
'?',
'’',
'"',
'“',
'”',
'–',
'À',
'È',
'É',
'Ù',
'Ú',
"'",
'"',
'ì',
'í',
'è',
'é',
'à',
'ù',
"'",
'"',
'!',
'#039;',
'&',
'Ä',
'ä',
'ü',
'Ü',
'ò',
'ó',
'Ò',
'Ó',
'Á',
'á');
$ziosanato = array(
'i',
'i',
'ss',
'oe',
'oe',
'-',
'',
'',
'-',
'',
'e',
'',
'-',
'-',
'-',
'-',
'-',
'',
'',
'',
'-',
'a',
'e',
'e',
'u',
'u',
'-',
'',
'i',
'i',
'e',
'e',
'a',
'u',
"",
'',
'',
'-',
'e',
'a',
'a',
'u',
'u',
'o',
'o',
'o',
'o',
'a',
'a');
$titolo = str_replace($zio,$ziosanato,$titolo); //sostituisce le lettere accentate e altro
$titolo = preg_replace('/[^a-zA-Z0-9_ \-()\/%-&]/s', '', $titolo); //toglie i caratteri speciali
$ogre = array('----','---','--');
$akuma = array('-','-','-');
$titolo = str_replace($ogre,$akuma,$titolo); //toglie i doppi/tripli trattini
$titolo = preg_replace('/-$/', '', $titolo); //toglie trattino alla fine
if (sizeof($titolo) > 0)
{
return $titolo;
}
else
return '';
}
?>
Sembra funzionare bene se la uso con dati che non vengono da MySql.
esempio se scrivo
$ciccio = 'I segreti del caffè corretto'
echo generaTitoloSanato($ciccio)
viene
'i-segreti-del-caffe-corretto'
Invece ho un problema quando ho i dati che vengono da MySql e specificatamente con str_replace ma solo nei caratteri accentati.
Per compilare il campo quando è vuoto nella tabella wp_post ho fatto così:
$username = "username";
$password = "password";
$hostname = "localhost";
$dbhandle = mysql_connect($hostname, $username, $password)
or die("Impossibile Connettersi a MySql");
echo "Connesso a MySQL<br>";
$selected = mysql_select_db("nomedatabase",$dbhandle)
or die("Non riesco a trovare il DB");
echo "Connesso al DB<br>";
$oldRows = mysql_query("SELECT * FROM wp_posts WHERE post_name = ''");
while($row = mysql_Fetch_array($oldRows))
{
$host = generaTitoloSanato($row['post_title']);
mysql_query("UPDATE wp_posts SET post_name='$host' WHERE ID='{$row['ID']}'");}
//close the connection
echo "Fatto<br>";
mysql_close($dbhandle);
Funziona tutto ma per esempio quando ho i caratteri accentati nel titolo esempio: 'I segreti del caffè corretto' diventa 'i-segreti-del-caff-corretto'
e mi tronca tutti i caratteri speciali. Ho provato a togliere $titolo = preg_replace('/[^a-zA-Z0-9_ \-()\/%-&]/s', '', $titolo); dalla funzione ed ho visto che i caratteri accentati non sono sostituiti dallo str_replace (mentre ad esempio lo spazio vuoto e altri caratteri si). Non capisco come mai se uso invece la fuzione con dati che non arrivano da MySql fuziona benissimo.
Qualcuno sa aiutarmi...