Caractères spéciaux / accents dans URL Wordpress

  • Auteur de la discussion Auteur de la discussion Heroes69
  • Date de début Date de début
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
 
Bonjour,
avant que l'on prenne du temps pour t'aider, peux tu nous expliquer pourquoi tu veux faire ça ?
 
parce que j'ai envie, je trouve ca plus jolie les url courte avec les accents, merci de votre aide
 
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 :)
 
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
 
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 ^^
 
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;
}
 
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 !
 
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.
 
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 :)
 
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 ?
 
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 :)
 
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
 
: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 ^^
 

➡️ Offre MyRankingMetrics ⬅️

pré-audit SEO gratuit avec RM Tech (+ avis d'expert)
coaching offert aux clients (avec Olivier Duffez ou Fabien Faceries)

Voir les détails ici

coaching SEO
Discussions similaires
Haut