Caractères spéciaux / accents dans URL Wordpress

Heroes69

WRInaute discret
Bonjour à la communauté,

je viens vers vous pour vous demander de l'aide pour permettre les caractères avec accents dans les permalinks d'un wordpress.

-> oui je sais c'est pas bien pour le référencement, pas la peine de me le dire


J'ai cherché pas mal sur le net et j'ai rien trouvé même si google.com (en même temps les ricains n'ont pas d'accent)

Donc si quelqu'un connait une méthode, ou a l'adresse d'un tuto je suis preneur !

Merci
 

e-kiwi

WRInaute accro
Bonjour,
avant que l'on prenne du temps pour t'aider, peux tu nous expliquer pourquoi tu veux faire ça ?
 

Heroes69

WRInaute discret
parce que j'ai envie, je trouve ca plus jolie les url courte avec les accents, merci de votre aide
 

Marie-Aude

WRInaute accro
A tes risques et périls (parce que "plus joli" ça vaut dire aussi pas mal de risques de problèmes liés à ton référencement) mais il va falloir que tu te fasses un hook à la mimine sur la routine de sanitization de l'url. Pour comprendre comment elle fonctionne regarde les plugins qui gère la translittération des umlauts dans les permalinks (cherche dans le repository umlaut + permalink ou german + permalink ou detusche permalink je ne sais plus)

Maintenant on te le dit "c'est une bêtise" après tu fais comme tu veux :)
 

Heroes69

WRInaute discret
J'ai installer les plugins Marie-Aude. Ca ne converti pas les accents dans l'url quand j'en met donc c'est pas mal mais quand je publie ou que je visualise le brouillon ca me met "Aucun résultat page non trouvé" une 404 .
Est ce qu'il y a quelque chose d'autre à faire ? au niveau du htaccess ya rien a changé je sais pas ? c'est bizarre car quand je clique sur le lien, ya bien l'url avec accent mais ca va sur une 404
 

Marie-Aude

WRInaute accro
Je ne t'ai pas dit de les installer, je t'ai dit de les regarder pour comprendre comment faire ce que tu veux faire ^^
 

Heroes69

WRInaute discret
Ah ! ben en faite oui j'ai regardé le code des plugin mais j'ai rien compris :'-)
Code:
require('lib.php');
add_filter('sanitize_title', 'transliterate_aeoeuess', 5, 3);

lib.php :
Code:
function transliterate_aeoeuess($title, $raw_title = NULL, $context = 'query') {
    // Hacky hook due to hacky core, see
    // http://core.trac.wordpress.org/ticket/16905

    if ($raw_title != NULL) {
        $title = $raw_title; // undo remove_accents
    }

    $title = str_replace('Ä', 'ae', $title);
    $title = str_replace('ä', 'ae', $title);
    $title = str_replace('Ö', 'oe', $title);
    $title = str_replace('ö', 'oe', $title);
    $title = str_replace('Ü', 'ue', $title);
    $title = str_replace('ü', 'ue', $title);
    $title = str_replace('ẞ', 'ss', $title);
    $title = str_replace('ß', 'ss', $title);
    $title = str_replace('é', 'e', $title);
    $title = str_replace('ê', 'e', $title);
    $title = str_replace('É', 'Z', $title);
    $title = str_replace('è', 'e', $title);
    $title = str_replace('à', 'a', $title);
    $title = str_replace('Ê', 'e', $title);



    if ($context == 'save') {
        $title = remove_accents($title); // redo remove_accents
    }

    return $title;
}
 

Heroes69

WRInaute discret
j'ai essayé pleins de chose et là je crois que j'ai tout planté ! mon wp ne marche plus :-/ j'ai des codes erreurs dans tout les sense ! à l'aide !
 

Marie-Aude

WRInaute accro
add_filter('sanitize_title', 'transliterate_aeoeuess', 5, 3);

En gros c'est simple, ici tu as le hook de wordpress sur lequel tu dois agir "sanitize_title'

Tu vas voir dans le core de wordpress comment ils font, et tu fais comme le monsieur une petite routine pour "ne pas remplacer" les caractères accentués (donc en gros pour remplacer les caractères accentués par eux mêmes, ou alors pour leur équivalent comme dans Wikipedia)

Après il faut voir ce que ça donne :
- dans les différentes fonctions utilisant les permaliens
- dans le flux rss
- dans la gestion des urls des commentaires.
 

Heroes69

WRInaute discret
Ok oui on veut faire comme wikipedia pour les url

on a pas de flux rss et on a pas de commentaire non plus donc ca simplifie beaucoup de chose, je vais regarder tout ça !
Merci Marie-Aude :)
 

Heroes69

WRInaute discret
Je pense que tout vient de là dans include/formatting.php
Code:
if (seems_utf8($string)) {
		$chars = array(
		// Decompositions for Latin-1 Supplement
		chr(195).chr(128) => 'A', chr(195).chr(129) => 'A',
		chr(195).chr(130) => 'A', chr(195).chr(131) => 'A',
		chr(195).chr(132) => 'A', chr(195).chr(133) => 'A',
		chr(195).chr(134) => 'AE',chr(195).chr(135) => 'C',
		chr(195).chr(136) => 'E', chr(195).chr(137) => 'E',
		chr(195).chr(138) => 'E', chr(195).chr(139) => 'E',
		chr(195).chr(140) => 'I', chr(195).chr(141) => 'I',
		chr(195).chr(142) => 'I', chr(195).chr(143) => 'I',
		chr(195).chr(144) => 'D', chr(195).chr(145) => 'N',
		chr(195).chr(146) => 'O', chr(195).chr(147) => 'O',
		chr(195).chr(148) => 'O', chr(195).chr(149) => 'O',
		chr(195).chr(150) => 'O', chr(195).chr(153) => 'U',
		chr(195).chr(154) => 'U', chr(195).chr(155) => 'U',
		chr(195).chr(156) => 'U', chr(195).chr(157) => 'Y',
		chr(195).chr(158) => 'TH',chr(195).chr(159) => 's',
		chr(195).chr(160) => 'a', chr(195).chr(161) => 'a',
		chr(195).chr(162) => 'a', chr(195).chr(163) => 'a',
		chr(195).chr(164) => 'a', chr(195).chr(165) => 'a',
		chr(195).chr(166) => 'ae',chr(195).chr(167) => 'c',
		chr(195).chr(168) => 'e', chr(195).chr(169) => 'e',
		chr(195).chr(170) => 'e', chr(195).chr(171) => 'e',
		chr(195).chr(172) => 'i', chr(195).chr(173) => 'i',
		chr(195).chr(174) => 'i', chr(195).chr(175) => 'i',
		chr(195).chr(176) => 'd', chr(195).chr(177) => 'n',
		chr(195).chr(178) => 'o', chr(195).chr(179) => 'o',
		chr(195).chr(180) => 'o', chr(195).chr(181) => 'o',
		chr(195).chr(182) => 'o', chr(195).chr(182) => 'o',
		chr(195).chr(185) => 'u', chr(195).chr(186) => 'u',
		chr(195).chr(187) => 'u', chr(195).chr(188) => 'u',
		chr(195).chr(189) => 'y', chr(195).chr(190) => 'th',
		chr(195).chr(191) => 'y',
		// Decompositions for Latin Extended-A
		chr(196).chr(128) => 'A', chr(196).chr(129) => 'a',
		chr(196).chr(130) => 'A', chr(196).chr(131) => 'a',
		chr(196).chr(132) => 'A', chr(196).chr(133) => 'a',
		chr(196).chr(134) => 'C', chr(196).chr(135) => 'c',
		chr(196).chr(136) => 'C', chr(196).chr(137) => 'c',
		chr(196).chr(138) => 'C', chr(196).chr(139) => 'c',
		chr(196).chr(140) => 'C', chr(196).chr(141) => 'c',
		chr(196).chr(142) => 'D', chr(196).chr(143) => 'd',
		chr(196).chr(144) => 'D', chr(196).chr(145) => 'd',
		chr(196).chr(146) => 'E', chr(196).chr(147) => 'e',
		chr(196).chr(148) => 'E', chr(196).chr(149) => 'e',
		chr(196).chr(150) => 'E', chr(196).chr(151) => 'e',
		chr(196).chr(152) => 'E', chr(196).chr(153) => 'e',
		chr(196).chr(154) => 'E', chr(196).chr(155) => 'e',
		chr(196).chr(156) => 'G', chr(196).chr(157) => 'g',
		chr(196).chr(158) => 'G', chr(196).chr(159) => 'g',
		chr(196).chr(160) => 'G', chr(196).chr(161) => 'g',
		chr(196).chr(162) => 'G', chr(196).chr(163) => 'g',
		chr(196).chr(164) => 'H', chr(196).chr(165) => 'h',
		chr(196).chr(166) => 'H', chr(196).chr(167) => 'h',
		chr(196).chr(168) => 'I', chr(196).chr(169) => 'i',
		chr(196).chr(170) => 'I', chr(196).chr(171) => 'i',
		chr(196).chr(172) => 'I', chr(196).chr(173) => 'i',
		chr(196).chr(174) => 'I', chr(196).chr(175) => 'i',
		chr(196).chr(176) => 'I', chr(196).chr(177) => 'i',
		chr(196).chr(178) => 'IJ',chr(196).chr(179) => 'ij',
		chr(196).chr(180) => 'J', chr(196).chr(181) => 'j',
		chr(196).chr(182) => 'K', chr(196).chr(183) => 'k',
		chr(196).chr(184) => 'k', chr(196).chr(185) => 'L',
		chr(196).chr(186) => 'l', chr(196).chr(187) => 'L',
		chr(196).chr(188) => 'l', chr(196).chr(189) => 'L',
		chr(196).chr(190) => 'l', chr(196).chr(191) => 'L',
		chr(197).chr(128) => 'l', chr(197).chr(129) => 'L',
		chr(197).chr(130) => 'l', chr(197).chr(131) => 'N',
		chr(197).chr(132) => 'n', chr(197).chr(133) => 'N',
		chr(197).chr(134) => 'n', chr(197).chr(135) => 'N',
		chr(197).chr(136) => 'n', chr(197).chr(137) => 'N',
		chr(197).chr(138) => 'n', chr(197).chr(139) => 'N',
		chr(197).chr(140) => 'O', chr(197).chr(141) => 'o',
		chr(197).chr(142) => 'O', chr(197).chr(143) => 'o',
		chr(197).chr(144) => 'O', chr(197).chr(145) => 'o',
		chr(197).chr(146) => 'OE',chr(197).chr(147) => 'oe',
		chr(197).chr(148) => 'R',chr(197).chr(149) => 'r',
		chr(197).chr(150) => 'R',chr(197).chr(151) => 'r',
		chr(197).chr(152) => 'R',chr(197).chr(153) => 'r',
		chr(197).chr(154) => 'S',chr(197).chr(155) => 's',
		chr(197).chr(156) => 'S',chr(197).chr(157) => 's',
		chr(197).chr(158) => 'S',chr(197).chr(159) => 's',
		chr(197).chr(160) => 'S', chr(197).chr(161) => 's',
		chr(197).chr(162) => 'T', chr(197).chr(163) => 't',
		chr(197).chr(164) => 'T', chr(197).chr(165) => 't',
		chr(197).chr(166) => 'T', chr(197).chr(167) => 't',
		chr(197).chr(168) => 'U', chr(197).chr(169) => 'u',
		chr(197).chr(170) => 'U', chr(197).chr(171) => 'u',
		chr(197).chr(172) => 'U', chr(197).chr(173) => 'u',
		chr(197).chr(174) => 'U', chr(197).chr(175) => 'u',
		chr(197).chr(176) => 'U', chr(197).chr(177) => 'u',
		chr(197).chr(178) => 'U', chr(197).chr(179) => 'u',
		chr(197).chr(180) => 'W', chr(197).chr(181) => 'w',
		chr(197).chr(182) => 'Y', chr(197).chr(183) => 'y',
		chr(197).chr(184) => 'Y', chr(197).chr(185) => 'Z',
		chr(197).chr(186) => 'z', chr(197).chr(187) => 'Z',
		chr(197).chr(188) => 'z', chr(197).chr(189) => 'Z',
		chr(197).chr(190) => 'z', chr(197).chr(191) => 's',
		// Decompositions for Latin Extended-B
		chr(200).chr(152) => 'S', chr(200).chr(153) => 's',
		chr(200).chr(154) => 'T', chr(200).chr(155) => 't',
		// Euro Sign
		chr(226).chr(130).chr(172) => 'E',
		// GBP (Pound) Sign
		chr(194).chr(163) => '');

		$string = strtr($string, $chars);
	} else {
		// Assume ISO-8859-1 if not UTF-8
		$chars['in'] = chr(128).chr(131).chr(138).chr(142).chr(154).chr(158)
			.chr(159).chr(162).chr(165).chr(181).chr(192).chr(193).chr(194)
			.chr(195).chr(196).chr(197).chr(199).chr(200).chr(201).chr(202)
			.chr(203).chr(204).chr(205).chr(206).chr(207).chr(209).chr(210)
			.chr(211).chr(212).chr(213).chr(214).chr(216).chr(217).chr(218)
			.chr(219).chr(220).chr(221).chr(224).chr(225).chr(226).chr(227)
			.chr(228).chr(229).chr(231).chr(232).chr(233).chr(234).chr(235)
			.chr(236).chr(237).chr(238).chr(239).chr(241).chr(242).chr(243)
			.chr(244).chr(245).chr(246).chr(248).chr(249).chr(250).chr(251)
			.chr(252).chr(253).chr(255);

		$chars['out'] = "EfSZszYcYuAAAAAACEEEEIIIINOOOOOOUUUUYaaaaaaceeeeiiiinoooooouuuuyy";

		$string = strtr($string, $chars['in'], $chars['out']);
		$double_chars['in'] = array(chr(140), chr(156), chr(198), chr(208), chr(222), chr(223), chr(230), chr(240), chr(254));
		$double_chars['out'] = array('OE', 'oe', 'AE', 'DH', 'TH', 'ss', 'ae', 'dh', 'th');
		$string = str_replace($double_chars['in'], $double_chars['out'], $string);


j'ai peur de touché à ça c'est quoi les chr ?
 

Marie-Aude

WRInaute accro
fonction php, chr (ça doit être le caractère correspondant au code ascii)

"vous n'avez pas de flux" ... vous avez fait comment vous les avez désactivé ?
et ça c'est quoi
-http://www.espace-musculation.com/feed/ ? :D

ohhhh un flux standard de wordpress :)
 

Heroes69

WRInaute discret
j'ai fais quelque modifs, quand je prévisualisé un brouillon avec des accents ca m'affiche la bonne url avec les accents et ça fait comme si ça marchais mais quand je publie ya de nouveau l'erreur 404

edit : a oui un flux ?? gloups
 

Marie-Aude

WRInaute accro
:D oui, et puis tu as un flux par catégorie, un flux des commentaires en général, un flux des commentaires par article, un flux par auteur...

(chuis sympa, je suis allée le voir sur Safari, sans Google Bar)

La suite en MP ^^

Bon blague à part, désactive WP cache, il ne doit pas aimer tout ça
Et tronque tes articles dans ton flux rss, ça t'évitera de te les faire pomper ^^
 

Discussions similaires

Haut