{"id":228698,"date":"2022-10-15T10:37:00","date_gmt":"2022-10-15T07:37:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=228698"},"modified":"2022-11-09T03:54:34","modified_gmt":"2022-11-09T00:54:34","slug":"luo-virtuaalitiedosto-wordpressissae-wordpress-multisite-tuella","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/fi\/luo-virtuaalitiedosto-wordpressissae-wordpress-multisite-tuella\/","title":{"rendered":"Luo virtuaalitiedosto WordPressiss\u00e4 WordPress Multisite -tuella"},"content":{"rendered":"\n<p>Ty\u00f6skentelin \u00e4skett\u00e4in WordPress Multisite -esiintym\u00e4n parissa, ja tarvitsin jokaisella sivustolla (t\u00e4ss\u00e4 tapauksessa monikielisell\u00e4) oman ainutlaatuisen dynaamisesti luodun sivustokartan. Loin n\u00e4m\u00e4 sivustokartat luomalla <strong>virtuaalisia tiedostoja<\/strong> WordPressiss\u00e4.<\/p>\n<p>T\u00e4ss\u00e4 artikkelissa kerrotaan, kuinka voit luoda virtuaalisen tiedoston ja sitten varmistaa, ett\u00e4 kyseist\u00e4 virtuaalitiedostoa ei voi k\u00e4ytt\u00e4\u00e4 WordPress Multisite -esiintym\u00e4n kaikkien sivustojen kautta.<\/p>\n<h2>Uudelleenkirjoituss\u00e4\u00e4nt\u00f6jen m\u00e4\u00e4ritt\u00e4minen<\/h2>\n<p>Luodaksemme virtuaalisen tiedoston, meid\u00e4n on ensin luotava joitain uudelleenkirjoituss\u00e4\u00e4nt\u00f6j\u00e4, jotta WordPress tiet\u00e4\u00e4 mit\u00e4 tehd\u00e4 virtuaaliselle URL-osoitteelle, jossa haluamme tiedostomme n\u00e4kyv\u00e4n.<\/p>\n<p>Seuraava esimerkki luo kaksi sivustokartan URL-osoitetta sitemap.xml ja sitemap-fr.xml.<\/p>\n<pre><code>function wholesomecode_sitemap_rewrites() {\n    global $wp;\n    $wp-&gt;add_query_var( 'map' );\n\n    add_rewrite_rule( 'sitemap.xml$', 'index.php?map=sitemap', 'top' );\n    add_rewrite_rule( '^sitemap-fr.xml$', 'index.php?map=sitemap-fr', 'top' );\n}\nadd_action( 'init', 'wholesomecode_sitemap_rewrites', 99 );\n<\/code><\/pre>\n<p>Huomaa, kuinka lis\u00e4\u00e4mme kyselymuuttujan &quot;kartalle&quot; ja yhdist\u00e4mme sitten sivustokarttamme nimen t\u00e4h\u00e4n kyselyyn.<\/p>\n<h2>Est\u00e4 kanoniset uudelleenohjaukset<\/h2>\n<p>Joskus, jos kanoniset uudelleenohjaukset ovat k\u00e4yt\u00f6ss\u00e4 (esimerkiksi laajennuksen, kuten Yoast SEO, kautta), WordPress yritt\u00e4\u00e4 lis\u00e4t\u00e4 vinoviivan URL-osoitteesi loppuun. Voimme est\u00e4\u00e4 t\u00e4m\u00e4n k\u00e4ytt\u00e4m\u00e4ll\u00e4 t\u00e4t\u00e4 toimintoa.<\/p>\n<pre><code>function wholesomecode_prevent_slash_on_map_variable( $redirect) {\n    if (get_query_var( 'map')) {\n        return false;\n    }\n    return $redirect;\n}\nadd_filter( 'redirect_canonical', 'wholesomecode_prevent_slash_on_map_variable' );\n<\/code><\/pre>\n<h2>Virtuaalitiedoston sis\u00e4ll\u00f6n luominen<\/h2>\n<p>Nyt vihdoin meid\u00e4n on asetettava itse virtuaalitiedostot. T\u00e4t\u00e4 varten voimme tarttua <code>template_include<\/code>koukkuun. T\u00e4ss\u00e4 on hyvin yksinkertaistettu versio siit\u00e4, milt\u00e4 sivustokarttamme voisivat n\u00e4ytt\u00e4\u00e4.<\/p>\n<p>Huomaa, kuinka k\u00e4yt\u00e4mme karttamuuttujaa m\u00e4\u00e4ritt\u00e4m\u00e4\u00e4n, mink\u00e4 virtuaalisen tiedoston haluamme n\u00e4ytt\u00e4\u00e4.<\/p>\n<pre><code>function wholesomecode_sitemap_contents( $template) {\n    $map = get_query_var( 'map' );\n    if (! empty( $map)) {\n        header( 'Content-type: text\/xml' );\n        if ('sitemap' === $map) {\n            ?&gt;\n            &lt;?xml version=\"1.0\" encoding=\"UTF-8\"?&gt;\n            &lt;sitemapindex xmlns=\"http:\/\/www.sitemaps.org\/schemas\/sitemap\/0.9\"&gt;\n                &lt;sitemap&gt;\n                    &lt;loc&gt;https:\n                &lt;\/sitemap&gt;\n            &lt;\/sitemapindex&gt;\n            &lt;?php\n        } elseif ('sitemap-fr' === $map) {\n            ?&gt;\n            &lt;sitemapindex xmlns=\"http:\/\/www.sitemaps.org\/schemas\/sitemap\/0.9\"&gt;\n                &lt;sitemap&gt;\n                    &lt;loc&gt;https:\n                &lt;\/sitemap&gt;\n            &lt;\/sitemapindex&gt;\n            &lt;?php\n        }\n        die();\n    }\n    return $template;\n}\nadd_action( 'template_include', 'wholesomecode_sitemap_contents' );\n<\/code><\/pre>\n<h3>Bonus: Sis\u00e4llyt\u00e4 staattiset tiedostot virtuaaliseen URL-osoitteeseesi<\/h3>\n<p>Yll\u00e4 oleva esimerkki oli hyvin yksinkertainen, mutta voit yhdist\u00e4\u00e4 staattiset tiedostot n\u00e4ihin virtuaalisiin URL-osoitteisiin vet\u00e4m\u00e4ll\u00e4 niiden sis\u00e4ll\u00f6n tiedostoon. Esimerkiksi t\u00e4ss\u00e4 k\u00e4yt\u00e4mme juurihakemistossa &#8217;maps&#8217; olevia sivustokarttoja ja sis\u00e4llyt\u00e4mme ne dynaamisesti karttamuuttujan perusteella.<\/p>\n<pre><code>function wholesomecode_sitemap_from_file( $template) {\n    $map = get_query_var( 'map' );\n    if (! empty( $map)) {\n        if (! function_exists( 'get_home_path')) {\n            include_once ABSPATH. '\/wp-admin\/includes\/file.php';\n        }\n        header( 'Content-type: text\/xml' );\n        include get_home_path(). 'maps\/'. $map. '.xml';\n        die;\n    }\n    return $template;\n}\nadd_action( 'template_include', 'wholesomecode_sitemap_from_file' );\n<\/code><\/pre>\n<h2>Huuhtele uudelleenkirjoituss\u00e4\u00e4nn\u00f6t<\/h2>\n<p>Viimeinen asia, joka sinun on teht\u00e4v\u00e4, ennen kuin n\u00e4et virtuaalitiedostosi, on huuhdella uudelleenkirjoituss\u00e4\u00e4nn\u00f6t. Jos olet liitt\u00e4nyt yll\u00e4 olevan ohjeen, <code>functions.php<\/code>paras toimintatapa on siirty\u00e4 <code>Settings &gt; Permalinks<\/code>WordPress-hallintapaneelissa kohtaan ja tallentaa pysyv\u00e4t linkit uudelleen. Mutta jos olet rakentamassa laajennusta, voit kytkeyty\u00e4 aktivointikoukkuun, jotta ne k\u00e4ynnistyv\u00e4t automaattisesti, kun aktivoit laajennuksen:<\/p>\n<pre><code>register_activation_hook( __FILE__, 'flush_rewrite_rules' );\n<\/code><\/pre>\n<p>Voit <a href=\"https:\/\/codex.wordpress.org\/Function_Reference\/flush_rewrite_rules\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">lukea lis\u00e4\u00e4 huuhtelus\u00e4\u00e4nn\u00f6ist\u00e4 WordPress Codexista<\/a> muista menetelmist\u00e4, jotka voivat olla merkityksellisi\u00e4 skenaariosi kannalta.<\/p>\n<p>Meid\u00e4n ranskalainen sivustokartta<\/p>\n<p>T\u00e4m\u00e4 toimii loistavasti! Virtuaalitiedostoja luodaan ilman ongelmia, mutta jos sitten vierailisin sivuston ranskankielisess\u00e4 versiossa ja etsisin sivustokartan (esim. <a href=\"https:\/\/mattwatson.codes\/fr\/sitemap.xml\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">mattwatson.codes\/fr\/sitemap.xml<\/a> ), voisin n\u00e4hd\u00e4 sivustokartan englanninkielisen version. Ei ihanteellinen.<\/p>\n<h2>Ainutlaatuiset virtuaalitiedostot WordPress Multisitessa<\/h2>\n<p>Ratkaisu virtuaalisten tiedostojen est\u00e4miseen muissa WordPress Multisite -esiintymiss\u00e4 on melko yksinkertainen. Ainoa mit\u00e4 sinun tarvitsee tehd\u00e4, kun m\u00e4\u00e4rit\u00e4t uudelleenkirjoituksia, on tarkistaa, ett\u00e4 t\u00e4ll\u00e4 hetkell\u00e4 katselemasi sivusto on se, jolla haluat kyseisen virtuaalitiedoston n\u00e4kyv\u00e4n.<\/p>\n<pre><code>function wholesomecode_sitemap_rewrites() {\n    global $wp;\n    $wp-&gt;add_query_var( 'map' );\n\n    if (get_current_blog_id() == '1') {\n        add_rewrite_rule( 'sitemap.xml$', 'index.php?map=sitemap', 'top' );\n    }\n\n    if (get_current_blog_id() === get_id_from_blogname( 'fr')) {\n        add_rewrite_rule( '^sitemap-fr.xml$', 'index.php?map=sitemap-fr', 'top' );\n    }\n}\nadd_action( 'init', 'wholesomecode_sitemap_rewrites', 99 );\n<\/code><\/pre>\n<p>Jos sinulla on WordPress Multisite pois p\u00e4\u00e4lt\u00e4, yll\u00e4 oleva toiminto katkeaa, joten sinun kannattaa tarkistaa, ett\u00e4 <code>get_current_blog_id<\/code>toiminto on olemassa ennen kuin yrit\u00e4t k\u00e4ytt\u00e4\u00e4 sit\u00e4.<\/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>Ty\u00f6skentelin \u00e4skett\u00e4in WordPress Multisite -esiintym\u00e4n parissa, ja tarvitsin jokaisella sivustolla (t\u00e4ss\u00e4 tapauksessa monikielisell\u00e4) oman ainutlaatuisen dynaamisesti luodun sivustokartan. Olen luonut&#8230;<\/p>\n","protected":false},"author":1,"featured_media":223984,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[719,843,803],"tags":[1166],"class_list":["post-228698","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-kehittaejae","category-opetusohjelmia","category-php-5","tag-affiai-fi"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/posts\/228698","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=228698"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/posts\/228698\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/media\/223984"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/media?parent=228698"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/categories?post=228698"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/tags?post=228698"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}