{"id":228706,"date":"2022-10-15T19:29:00","date_gmt":"2022-10-15T16:29:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=228706"},"modified":"2022-11-09T03:56:49","modified_gmt":"2022-11-09T00:56:49","slug":"wordpress-sivustosi-kielen-locale-muuttaminen-dynaamisesti","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/fi\/wordpress-sivustosi-kielen-locale-muuttaminen-dynaamisesti\/","title":{"rendered":"WordPress-sivustosi kielen (locale) muuttaminen dynaamisesti"},"content":{"rendered":"\n<p><a href=\"https:\/\/hashnode.com\/@wholesomecode\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external\"><\/a><\/p>\n<p>WordPressiss\u00e4 on loistavia monikielisi\u00e4 laajennuksia, mutta yht\u00e4 asiakasprojektia varten tarvitsin jotain paljon joustavampaa, koska t\u00e4m\u00e4n asiakkaan piti palvella useita maita, joista jokainen puhui useita kieli\u00e4.<\/p>\n<p>Lyhyesti sanottuna asiakkaalla piti olla usean sivuston esiintym\u00e4, jonka maa ja kieli oli asetettu oletusarvoiksi, ja kyky ohittaa maa ja kieli jokaisella sivulla\/viestiss\u00e4.<\/p>\n<h2>Monikielisen laajennuksen rakentaminen<\/h2>\n<p>Jos tarpeeksi ihmisi\u00e4 <a href=\"https:\/\/wholesomecode.ltd\/contact\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">h\u00e4iritsee minua tekem\u00e4\u00e4n sen<\/a>, saatan harkita koko jutun julkaisemista erillisen\u00e4 laajennuksena, mutta rakentamani monikielisen laajennuksen ydin perustuu <code>locale<\/code>WordPress-suodattimeen, ja laajennuksen ydin on seuraavassa koodinp\u00e4tk\u00e4ss\u00e4:<\/p>\n<pre><code>\nfunction wholesomecode_example_redefine_locale( $locale) {\n\n    $country = get_post_meta( get_the_id(), '_wholesomecode_example_global_country_override', true );\n    $lang    = get_post_meta( get_the_id(), '_wholesomecode_example_global_language_override', true );\n\n    if (( empty( $lang) ||! (is_page() || is_single() || is_singular()) )) {\n        $country = get_theme_mod( 'wholesomecode_example_multilingual_country', 'gb' );\n        $lang    = get_theme_mod( 'wholesomecode_example_multilingual_language', 'en' );\n    }\n\n    if ('default' !== $country) {\n        $locale = $lang. '_'. strtoupper( $country );\n    } else {\n        $locale = $lang. '-'. $country;\n    }\n\n    return $locale;\n\n}\nadd_filter( 'locale', 'wholesomecode_example_redefine_locale', 10 );\n<\/code><\/pre>\n<p>Tada! Kieli-asetus on nyt asetettu, ja monikielisen sivustosi pit\u00e4isi nyt vaihtaa kielt\u00e4 sivusi\/sivustosi sis\u00e4ll\u00f6nkuvauksen perusteella.<\/p>\n<h2>Odota! WordPressin ydinoletusk\u00e4\u00e4nn\u00f6kseni eiv\u00e4t toimi!<\/h2>\n<p>T\u00e4m\u00e4 on ongelma, johon t\u00f6rm\u00e4sin, enk\u00e4 voinut ymm\u00e4rt\u00e4\u00e4 sit\u00e4 el\u00e4m\u00e4ni aikana. Teemani k\u00e4\u00e4nnettiin t\u00e4ydellisesti, kun olin lis\u00e4nnyt asiaankuuluvat .mo- ja .po-tiedostot, mutta WordPress-ytimen oletusk\u00e4\u00e4nn\u00f6kset (kuten kommenttimallin &quot;J\u00e4t\u00e4 vastaus&quot; -viesti) eiv\u00e4t k\u00e4\u00e4nnetty.<\/p>\n<p>K\u00e4vi ilmi, ett\u00e4 ratkaisu oli melko yksinkertainen! Vaikka olin huolehtinut mukautetuista verkkotunnuksen k\u00e4\u00e4nn\u00f6ksist\u00e4, olin unohtanut lis\u00e4t\u00e4 yhden yksinkertaisen koodin teemaan: <code>load_default_textdomain()<\/code>.<\/p>\n<pre><code>\nload_default_textdomain();\n<\/code><\/pre>\n<p>Jos olen saanut pari tuntia pois virheenkorjauksestasi t\u00e4ll\u00e4 &quot;yhdell\u00e4 oudolla vinkill\u00e4&quot;, olet tervetullut!<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/wholesomecode.ltd\" class=\"external external_icon\">wholesomecode.ltd<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>WordPressiss\u00e4 on loistavia monikielisi\u00e4 laajennuksia, mutta yht\u00e4 asiakasprojektia varten tarvitsin jotain paljon joustavampaa, koska t\u00e4m\u00e4 asiakas tarvitsi&#8230;<\/p>\n","protected":false},"author":1,"featured_media":224116,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[719,895,917,843,864],"tags":[1166],"class_list":["post-228706","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-kehittaejae","category-koodi","category-muut","category-opetusohjelmia","category-wordpress-5","tag-affiai-fi"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/posts\/228706","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/comments?post=228706"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/posts\/228706\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/media\/224116"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/media?parent=228706"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/categories?post=228706"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/tags?post=228706"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}