✅ WEB ja WordPressi uudised, teemad, pistikprogrammid. Siin jagame näpunäiteid ja parimaid veebisaidi lahendusi.

Kohandatud ümberkirjutamise reeglid ja lehemallid WordPressis

18

WordPress Rewrite API on kindel API eeldusel, et olete regulaaravaldistega rahul.

Ja ausalt, isegi kui te seda ei tee, muudavad sellised tööriistad nagu PHP Live RegEx koodi testimise enne add_rewrite_ruleAPI-kutsesse saatmist väga lihtsaks.

Kohandatud ümberkirjutamise reeglid ja lehemallid WordPressis

Siiski võite mõnikord leida end olukorrast, kus peate töötama ümberkirjutamise reeglite ja lehemallidega. Ja kui see nii on, pole see alati nii lihtne kui lihtsa kõne tegemine ühe regulaaravaldise abil.

Põhjus? Kui teil on mitu lehte, mis kasutavad sama malli, siis ei pruugi leht igal lehel töötavas päringus alati asuda samas registris.

Selleks peame seda käsitlema veidi teistmoodi, kui näiteks lihtsalt globaalses päringus teabe numbrilisele indeksile ligi pääsedes.

Reeglite ja lehemallide ümberkirjutamine

Esiteks oletame, et meil on kaks malli (mis ei ole kindlas järjekorras):

  1. mall-alpha.php
  2. template-beta.php

Ja siis oletame, et tahame seadistada kohandatud URL-i lehtedele, millest igaüks kasutab ühte neist mallidest.

See jaguneks järgmisteks sammudeks:

  1. Korrake päringus olevaid postitusi,
  2. Salvestage postitus, kasutades malli vastavas massiivis,
  3. Seadistage ümberkirjutamise reeglid iga postituse jaoks, millel on antud päring.

Selle näite puhul hoian ümberkirjutamise reeglid üsna lihtsad. Lõppude lõpuks võib regulaaravaldiste järgimine olla piisavalt raske, nii et nende järgimine päringuobjekti, mitme massiivi ja reeglite käsitlemise ajal võib olla pisut raske.

Seda arvestades on siin näidiskood, mis on jagatud ülaltoodud sammude põhjal. Postituse lõpus jagan katkendit, mis koondab kõik mõne eraldi funktsioonina, et saaksite näha, kuidas see kõik kokku sobib.

Seda kõike arvesse võttes toimige järgmiselt.

1 Ümberkirjutamise reeglite lisamine

Esiteks peame lugema teavet globaalsest WordPressi päringuobjektist, et leida kõik lehed, millel on mallid.

Selleks saame lugeda globaalse päringuobjekti teabe kohalikku muutujasse. Nii on lihtne ülejäänud koodist eemalduda, kui pole midagi, millega töötada.

<?php 

$query = $this->query->query([
    'post_type' => 'page',
    'meta_key' => '_wp_page_template',
    'meta_value' => ['template-alpha.php', 'template-beta.php'],
]);

if (!$query) {
    return;
}

// More to come...

2 Salvestage asjakohane teave massiivi

Eeldades, et on lehekülgi, millel on mallid, salvestame kõik lehed massiividesse, et saaksime hõlpsasti hallata nende vastavaid ümberkirjutusreegleid.

<?php

foreach ($query as $post) {
    $slug = get_page_template_slug($post->ID);

    if ('template-alpha.php' === $slug) {
        $this->alphaPages[] = $post;
    }

    if ('template-find-a-camp.php' === $slug) {
        $this->betaPages[] = $post;
    }
}

Pange tähele, et ülaltoodud osas viitan globaalsele massiivile. Oletame, et see initsialiseeritakse klassi konstruktoris lihtsalt tühja massiivina.

3 Seadistage ümberkirjutamise reeglid

Nüüd, kui meil on kaks massiivi – üks iga malli ja seda sisaldavate lehtede jaoks –, saame neid korrata ja määrata igale sellisele lehele ümberkirjutusreeglid.

Oletame näiteks, et ühe malli, näiteks alfa jaoks, tahame seadistada ümberkirjutamise reeglid USA ja osariikide jaoks.

template-alpha.phpSiin on kood :

<?php

add_rewrite_tag('%country%', '([^&]+)');
add_rewrite_tag('%state%', '([^&]+)');

foreach ($this->alphaPages as $post) {
    add_rewrite_rule(
        '^'.$post->post_name.'/([^/]*)/([^/]*)/?',
        'index.php?page_id='.$post->ID.'&country=$matches[1]&state=$matches[2]',
        'top'
    );

    add_rewrite_rule(
        '^'.$post->post_name.'/([^/]*)/?',
        'index.php?page_id='.$post->ID.'&country=$matches[1]',
        'top'
    );
}

Ja siin ontemplate-beta.php kood :

<?php

add_rewrite_tag('%acme-id%', '([^&]+)');

foreach ($this->betaPages as $post) {
    add_rewrite_rule(
        '^(.*)?/([A-Za-z0-9-]+-)(d+)/?',
        'index.php?page_id='.$post->ID.'&acme-id=$matches[3]',
        'top'
    );
}

Muidugi on ülaltoodud koodis kasutatud regulaaravaldised lihtsalt demonstreerimise eesmärgil. Teie raha eest, mida teie projekti jaoks vaja läheb.

4 Nüüd kõik koos

Oluline on jagada kogu see funktsionaalsus oma meetoditeks, et seda saaks vajadusel hõlpsasti kapseldada ja testida.

Selleks näeb täiskood välja järgmine :

<?php

public function addRewriteRules()
{
    $query = $this->query->query([
        'post_type' => 'page',
        'meta_key' => '_wp_page_template',
        'meta_value' => ['template-alpha.php', 'template-beta.php'],
    ]);

    if (!$query) {
        return;
    }

    $this->setPageTypes($query);
    $this->setAlphaRewriteRules();
    $this->setBetaRewriteRules();
}

private function setPageTypes($query)
{
    foreach ($query as $post) {
        $slug = get_page_template_slug($post->ID);

        if ('template-alpha.php' === $slug) {
            $this->alphaPages[] = $post;
        }

        if ('template-find-a-camp.php' === $slug) {
            $this->betaPages[] = $post;
        }
    }
}

private function setAlphaRewriteRules()
{
    add_rewrite_tag('%country%', '([^&]+)');
    add_rewrite_tag('%state%', '([^&]+)');

    foreach ($this->alphaRules as $post) {
        add_rewrite_rule(
            '^'.$post->post_name.'/([^/]*)/([^/]*)/?',
            'index.php?page_id='.$post->ID.'&country=$matches[1]&state=$matches[2]',
            'top'
        );

        add_rewrite_rule(
            '^'.$post->post_name.'/([^/]*)/?',
            'index.php?page_id='.$post->ID.'&country=$matches[1]',
            'top'
        );
    }
}

private function setBetaRewriteRules()
{
    add_rewrite_tag('%acme-id%', '([^&]+)');

    foreach ($this->betaPages as $post) {
        add_rewrite_rule(
            '^(.*)?/([A-Za-z0-9-]+-)(d+)/?',
            'index.php?page_id='.$post->ID.'&acme-id=$matches[3]',
            'top'
        );
    }
}

Pidage siiski meeles; see põhineb lihtsalt selles postituses jagatud demokoodil. Kui töötate oma projekti kallal, on regulaaravaldised, mallid ja nii edasi erinevad.

See veebisait kasutab teie kasutuskogemuse parandamiseks küpsiseid. Eeldame, et olete sellega rahul, kuid saate soovi korral loobuda. Nõustu Loe rohkem