Luo virtuaalitiedosto WordPressissä WordPress Multisite -tuella
Työskentelin äskettäin WordPress Multisite -esiintymän parissa, ja tarvitsin jokaisella sivustolla (tässä tapauksessa monikielisellä) oman ainutlaatuisen dynaamisesti luodun sivustokartan. Loin nämä sivustokartat luomalla virtuaalisia tiedostoja WordPressissä.
Tässä artikkelissa kerrotaan, kuinka voit luoda virtuaalisen tiedoston ja sitten varmistaa, että kyseistä virtuaalitiedostoa ei voi käyttää WordPress Multisite -esiintymän kaikkien sivustojen kautta.
Uudelleenkirjoitussääntöjen määrittäminen
Luodaksemme virtuaalisen tiedoston, meidän on ensin luotava joitain uudelleenkirjoitussääntöjä, jotta WordPress tietää mitä tehdä virtuaaliselle URL-osoitteelle, jossa haluamme tiedostomme näkyvän.
Seuraava esimerkki luo kaksi sivustokartan URL-osoitetta sitemap.xml ja sitemap-fr.xml.
function wholesomecode_sitemap_rewrites() {
global $wp;
$wp->add_query_var( 'map' );
add_rewrite_rule( 'sitemap.xml$', 'index.php?map=sitemap', 'top' );
add_rewrite_rule( '^sitemap-fr.xml$', 'index.php?map=sitemap-fr', 'top' );
}
add_action( 'init', 'wholesomecode_sitemap_rewrites', 99 );
Huomaa, kuinka lisäämme kyselymuuttujan "kartalle" ja yhdistämme sitten sivustokarttamme nimen tähän kyselyyn.
Estä kanoniset uudelleenohjaukset
Joskus, jos kanoniset uudelleenohjaukset ovat käytössä (esimerkiksi laajennuksen, kuten Yoast SEO, kautta), WordPress yrittää lisätä vinoviivan URL-osoitteesi loppuun. Voimme estää tämän käyttämällä tätä toimintoa.
function wholesomecode_prevent_slash_on_map_variable( $redirect) {
if (get_query_var( 'map')) {
return false;
}
return $redirect;
}
add_filter( 'redirect_canonical', 'wholesomecode_prevent_slash_on_map_variable' );
Virtuaalitiedoston sisällön luominen
Nyt vihdoin meidän on asetettava itse virtuaalitiedostot. Tätä varten voimme tarttua template_includekoukkuun. Tässä on hyvin yksinkertaistettu versio siitä, miltä sivustokarttamme voisivat näyttää.
Huomaa, kuinka käytämme karttamuuttujaa määrittämään, minkä virtuaalisen tiedoston haluamme näyttää.
function wholesomecode_sitemap_contents( $template) {
$map = get_query_var( 'map' );
if (! empty( $map)) {
header( 'Content-type: text/xml' );
if ('sitemap' === $map) {
?>
<?xml version="1.0" encoding="UTF-8"?>
<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<sitemap>
<loc>https:
</sitemap>
</sitemapindex>
<?php
} elseif ('sitemap-fr' === $map) {
?>
<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<sitemap>
<loc>https:
</sitemap>
</sitemapindex>
<?php
}
die();
}
return $template;
}
add_action( 'template_include', 'wholesomecode_sitemap_contents' );
Bonus: Sisällytä staattiset tiedostot virtuaaliseen URL-osoitteeseesi
Yllä oleva esimerkki oli hyvin yksinkertainen, mutta voit yhdistää staattiset tiedostot näihin virtuaalisiin URL-osoitteisiin vetämällä niiden sisällön tiedostoon. Esimerkiksi tässä käytämme juurihakemistossa ’maps’ olevia sivustokarttoja ja sisällytämme ne dynaamisesti karttamuuttujan perusteella.
function wholesomecode_sitemap_from_file( $template) {
$map = get_query_var( 'map' );
if (! empty( $map)) {
if (! function_exists( 'get_home_path')) {
include_once ABSPATH. '/wp-admin/includes/file.php';
}
header( 'Content-type: text/xml' );
include get_home_path(). 'maps/'. $map. '.xml';
die;
}
return $template;
}
add_action( 'template_include', 'wholesomecode_sitemap_from_file' );
Huuhtele uudelleenkirjoitussäännöt
Viimeinen asia, joka sinun on tehtävä, ennen kuin näet virtuaalitiedostosi, on huuhdella uudelleenkirjoitussäännöt. Jos olet liittänyt yllä olevan ohjeen, functions.phpparas toimintatapa on siirtyä Settings > PermalinksWordPress-hallintapaneelissa kohtaan ja tallentaa pysyvät linkit uudelleen. Mutta jos olet rakentamassa laajennusta, voit kytkeytyä aktivointikoukkuun, jotta ne käynnistyvät automaattisesti, kun aktivoit laajennuksen:
register_activation_hook( __FILE__, 'flush_rewrite_rules' );
Voit lukea lisää huuhtelusäännöistä WordPress Codexista muista menetelmistä, jotka voivat olla merkityksellisiä skenaariosi kannalta.
Meidän ranskalainen sivustokartta
Tämä toimii loistavasti! Virtuaalitiedostoja luodaan ilman ongelmia, mutta jos sitten vierailisin sivuston ranskankielisessä versiossa ja etsisin sivustokartan (esim. mattwatson.codes/fr/sitemap.xml ), voisin nähdä sivustokartan englanninkielisen version. Ei ihanteellinen.
Ainutlaatuiset virtuaalitiedostot WordPress Multisitessa
Ratkaisu virtuaalisten tiedostojen estämiseen muissa WordPress Multisite -esiintymissä on melko yksinkertainen. Ainoa mitä sinun tarvitsee tehdä, kun määrität uudelleenkirjoituksia, on tarkistaa, että tällä hetkellä katselemasi sivusto on se, jolla haluat kyseisen virtuaalitiedoston näkyvän.
function wholesomecode_sitemap_rewrites() {
global $wp;
$wp->add_query_var( 'map' );
if (get_current_blog_id() == '1') {
add_rewrite_rule( 'sitemap.xml$', 'index.php?map=sitemap', 'top' );
}
if (get_current_blog_id() === get_id_from_blogname( 'fr')) {
add_rewrite_rule( '^sitemap-fr.xml$', 'index.php?map=sitemap-fr', 'top' );
}
}
add_action( 'init', 'wholesomecode_sitemap_rewrites', 99 );
Jos sinulla on WordPress Multisite pois päältä, yllä oleva toiminto katkeaa, joten sinun kannattaa tarkistaa, että get_current_blog_idtoiminto on olemassa ennen kuin yrität käyttää sitä.