Hiljuti töötasin WordPressi mitme saidi eksemplari kallal ja vajasin, et igal saidil (praegusel juhul mitmekeelsel) oleks oma ainulaadne dünaamiliselt loodud saidikaart. Loosin need saidikaardid, luues WordPressis virtuaalseid faile .
Selles artiklis kirjeldatakse, kuidas luua virtuaalset faili ja seejärel tagada, et sellele virtuaalsele failile ei pääseks juurde teie WordPressi mitme saidi eksemplari igal saidil.
Ümberkirjutamise reeglite seadistamine
Virtuaalse faili loomiseks peame kõigepealt looma mõned ümberkirjutamise reeglid, et WordPress teaks, mida teha virtuaalse URL-iga, kus me tahame, et meie fail ilmuks.
Järgmine näide loob kaks saidiplaani URL-i 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 );
Pange tähele, kuidas lisame päringumuutuja ‘map’ ja seejärel vastendame sellele päringule oma saidiplaani nime.
Kanooniliste ümbersuunamiste vältimine
Mõnikord, kui teil on kanoonilised ümbersuunamised lubatud (näiteks pistikprogrammi, näiteks Yoast SEO kaudu), proovib WordPress lisada teie URL-i lõppu kaldkriipsu. Selle funktsiooni abil saame seda vältida.
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' );
Virtuaalse faili sisu loomine
Nüüd peame lõpuks seadistama virtuaalsed failid ise. Selleks saame konksu külge template_includehaakida. Siin on meie saidiplaanide väga lihtsustatud versioon.
Pange tähele, kuidas me kasutame kaardimuutujat, et määrata, millist virtuaalset faili soovime kuvada.
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' );
Boonus: lisage oma virtuaalsesse URL-i staatilised failid
Ülaltoodud näide oli väga lihtne, kuid saate staatilised failid nendesse virtuaalsetesse URL-idesse vastendada, tõmmates nende sisu faili. Näiteks siin kasutame juurkataloogis ‘maps’ olevaid saidikaarte ja kaasame need dünaamiliselt kaardimuutuja alusel.
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' );
Ümberkirjutamise reeglite loputamine
Viimane asi, mida peate tegema, enne kui näete oma virtuaalseid faile, on ümberkirjutamise reeglite loputamine. Kui olete ülaltoodud juhised kleepinud, functions.phpon parim toimimisviis avada Settings > Permalinksoma WordPressi juhtpaneelil ja salvestada oma püsilingid uuesti. Kuid kui loote pistikprogrammi, saate aktiveerimiskonksu külge haakida, nii et need käivituvad automaatselt, kui oma pistikprogrammi aktiveerite:
register_activation_hook( __FILE__, 'flush_rewrite_rules' );
Loputusreeglite kohta leiate lisateavet WordPressi koodeksist, et leida muid meetodeid, mis võivad teie stsenaariumi jaoks olla asjakohased.
Meie prantsuskeelne saidikaart
See töötab suurepäraselt! Virtuaalsete failide loomisega pole probleeme, kuid kui ma külastaksin saidi prantsusekeelset versiooni ja otsiksin saidiplaani (nt: mattwatson.codes/fr/sitemap.xml ), näeksin ma saidiplaani ingliskeelset versiooni. Pole ideaalne.
Unikaalsed virtuaalsed failid WordPressi mitmesaidis
Lahendus virtuaalsete failide takistamiseks teie teistes WordPressi mitme saidi eksemplarides on üsna lihtne. Kõik, mida peate ümberkirjutamise seadistamisel tegema, on kontrollida, kas praegu vaadatav sait on see, millel soovite seda virtuaalset faili kuvada.
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 );
Kui teil on WordPress Multisite välja lülitatud, siis ülaltoodud funktsioon katkeb, seega võiksite get_current_blog_idenne selle kasutamist kontrollida, kas see funktsioon on olemas.