Úvodní stránka › Fórum podpory WordPressu › Problémy s WordPressem › Špatné řazení příspěvků podle abecedy
Štítky: Databáze, DB_COLLATE, Diakritika, kódování, Porovnávání, Řazení, str_split(), utf8, utf8mb4_czech_ci, utf8mb4_unicode_ci, WordPress 4.4, wp-config.php
Zvolené téma obsahuje celkem 6 odpovědí. Do diskuze (3 účastníci) se naposledy zapojil uživatel sjiamnocna a poslední změna je stará 9 let, 1 měsíc.
-
AutorPříspěvky
-
24. listopadu 2015 (10:27) #25502
Dobrý den,
chtěl bych touto cestou poprosit o radu.
Na webu se snažím vypisovat jednotlivé příspěvky podle abecedy na základě hodnoty v titulku příspěvku:
<?php query_posts('category_name=ucitele-teorie&orderby=title&order=ASC'); ?> <?php while (have_posts()) : the_post(); $fimg = get_post_meta($post->ID, "thumb", TRUE); ?> <?php the_title() ?> <?php endwhile; ?> <?php wp_reset_query(); ?>
Jenomže pokud se podívám na výsledek na webu, tak příspěvky začínající např. na Š řadí před těmi začínající na S
Pokusil jsem se nastavit ve
wp-config.php
:/** Database Charset to use in creating database tables. */ define('DB_CHARSET', 'utf8'); /** The Database Collate type. Don't change this if in doubt. */ define('DB_COLLATE', 'utf8_czech_ci');
tabulky v DB mám defaulně:
utf8mb4_unicode_ci
Celý web běží na Wedosu.
Nevíte prosím kde dělám chybu?
25. listopadu 2015 (16:33) #25531Jo, to je věčný problém české diakritiky v programování – viz ASCII tabulka :D
Na toto jsem taky narazil a hledal jsem a nenašel…
Takže jsem se toho vzdal, a řadím příspěvky podle data ;)Napadá mně možný postup (podle mně, možná -určitě ;) – někdo má lepší), je načíst si přispěvky do proměnných (asi do pole array) a potom seřadit podle “vlastní” abecedy:
$abc = str_split('AaÁáBbCcČčDďĎďEeÉéĚěFfGgHhIiÍíJjKkLlMmNnŇňOoÓóPpQqRrŘřSsŠšTtŤťUuÚŮúůVvWwXxYyÝýZzŽz'); $posts = array(); foreach ($prispevky as $prispevek){ //... }
Tento postup vřele nedoporučuju, nikdy jsem to nezkoušel :)
27. listopadu 2015 (21:09) #2557528. listopadu 2015 (17:11) #25596@sjiamnocna: Takže pomocí str_split() vytvoříte pole, které bude obsahovat jednotlivá písmena abecedy a následně ho budete procházet a přiřazovat k němu příspěvky podle počátečního písmena? A co když budou na webu stovky příspěvků? Pokud tomu dobře rozumím, tak bude třeba projít pokaždé všechny, abyste získal správný výsledek?
@kuzmic11: Podle mě by mělo stačit vlézt do databáze, do tabulky
wp_posts
, najít sloupečekpost_title
a změnit mu porovnávání zutf8mb4_unicode_ci
nautf8mb4_czech_ci
. Obávám se, že změna v souboruwp-config.php
tomu nepomůže, ale můžete vykoušet. Ale @sjiamnocna má pravdu, že odkazované téma s tím určitě souvisí…28. listopadu 2015 (23:29) #25616Uznávám, dost hrozné řešení, ale pokud není jiná možnost, asi by to bylo – minimálně na malém webu plynule – schopno fungovat :)
_____Pardon.. Měl jsem tušení, že
define('DB_COLLATE', '');
změní v DB i porovnávání28. listopadu 2015 (23:37) #25617@sjiamnocna: Moc se mi to řešení nezdá, ale nevím, nikdy jsem ho nikde neviděl v praxi (ani v podobě nějakého kódu) :-)
Ano,
DB_COLLATE
by to mělo řešit, ale problém je v tom, že po změně v souboruwp-config.php
až v nově vytvořených databázových tabulkách (či sloupcích). Ale už se na tom pracuje a oslovil jsem vývojáře, aby se podařilo tento problém eliminovat, tak by mohlo být toto nastaveníDB_COLLATE
přímo součástí české verze (tedy de facto překlad souboruwp-config-sample.php
). Teď ještě řeším nejlepší možné nastavení, aby vše fungovalo, ale možná to už bude součástí české verze pro WordPress 4.4. Bohužel to zatím řeší problémy pouze pro nově instalované weby…28. listopadu 2015 (23:42) #25618To by byl velký posun pro Češtinu na WP, a doufám, že to bude opravdu nějak fungovat :)
-
AutorPříspěvky
Pokud chcete odpovědět na toto téma, musíte se nejdříve přihlásit.