✅ WEB- ja WordPress -uutiset, -teemat, -laajennukset. Täällä jaamme vinkkejä ja parhaita verkkosivustoratkaisuja.

Luo virtuaalitiedosto WordPressissä WordPress Multisite -tuella

25

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ä.

Tämä verkkosivusto käyttää evästeitä parantaakseen käyttökokemustasi. Oletamme, että olet kunnossa, mutta voit halutessasi kieltäytyä. Hyväksyä Lisätietoja