Skriva om webbadresser i WordPress-tips och plugin
De senaste uppdateringarna till WordPress har gjort det möjligt för utvecklare att anpassa sin personliga webbplats mycket snabbt. Det är enkelt att uppdatera områden av ditt tema, ersätta widgets i sidofältet och till och med skriva egna anpassade PHP-kodfunktioner. Expansionen är enorm - och ett område av popularitet är omskrivning av ganska URL-permalinkar.
Det finns några metoder du kan använda för att uppdatera standard WordPress omskrivningssystemet. I denna handledning delar jag några exempel och visar hur enkelt processen kan vara. Du behöver lite förståelse för PHP för att följa vad som händer i koden, men det är så enkelt att kopiera och klistra in i din egen mall, det är praktiskt taget inget arbete involverat.
Förstå WP_Rewrite
Om du är bekant med mod_rewrite på Apache-servrar kommer du hämta på WordPress-omskrivningssyntaxen. Deras system är fortfarande byggt på toppen av en .htaccess fil, men alla regler är kodade i PHP. Detta gör faktiskt processen enklare eftersom vi har större kontroll över att vi skriver egna webbadresser.
Jag rekommenderar att skumma på $ wp_rewrite klass sidan eftersom det har massor av info om ämnet. Det finns även små exempel vi kan referera till för att göra allt lättare att förstå. Huvuddelen av koden kan skrivas direkt i ditt tema functions.php fil. Låt oss börja med att titta på standardskrivningarna som redan ingår i WordPress.
Innehåll av $ wp_rewrite-> regler
Genom att förklara $ wp_rewrite
klass som global har vi tillgång till alla interna data. När du lägger till egna regler läggs de till i en matris med namnet $ Wp_rewrite-> regler
. Det är viktigt att komma ihåg denna variabel eftersom du sannolikt behöver referera data många gånger under utveckling.
regler); ?>
Jag lade till det här koden i mitt tema page.php fil. Det kommer att mata ut en stor mängd data som ser ut som en stor röra. Men om du Visa källa På din sida är det faktiskt enkelt att se vilka omskrivningsregler som matchas till vilket filnamn. Låt oss exempelvis titta på reglerna för kategorinomskrivningar:
[category /(.+?)/?$] => index.php? category_name = $ matchningar [1]
Biten på vänster sida i parentes är vår Apache RewriteRule att leta efter. Börja med avsnittet /kategori/ följt av någon sträng av tecken. Om det här matchas ser servern att referera till index.php? CATEGORY_NAME =
medan du ändrar variabeln i slutet.
Ställ in anpassade Permalinks
Det finns så mycket innehåll att gå över i $ wp_rewrite-klassen ensam. Många andra egenskaper kan hänvisas, till exempel $ Wp_rewrite-> category_base
eller $ Wp_rewrite-> author_base
för att dra standardwebadressstrukturerna för dessa sidor. Men förutom att dra WPs standardinställningar kan vi också bygga våra egna regler.
Ombyggnad av författarbasen
När du anger inställningssidan för Permalinks har du möjlighet att återställa kategorier och taggar. Men möjligheten att återställa din författarbas saknas märkligt.
Men vi kan använda add_rewrite_rule ()
från WordPress 'codex för att integrera några nya inställningar. I det här fallet har jag ersatt /författare/ med /författare/ men du kan använda vilken bas du helst gillar. Dessutom har jag kopierat några av de andra omdirigeringarna till författarsidor och RSS-flöden. Du kan lägga till det här kvarteret i ditt temas funktioner.php-fil.
add_action ('init', 'add_author_rules'); funktion add_author_rules () add_rewrite_rule ("författare / ([^ /] +) /?", "index.php? author_name = $ matchningar [1]", "topp"); add_rewrite_rule ("skrivare / ([^ /] +) / sida /? ([0-9] 1,) /?", "index.php? author_name = $ matchningar [1] & paged = $ matchningar [2] ", "topp"); add_rewrite_rule ("skrivare / ([^ /] +) / (feed | rdf | rss | rss2 | atom) /?", "index.php? author_name = $ matchar [1] & feed = $ matchar [2]", topp"); add_rewrite_rule ("skrivare / ([^ /] +) / feed / (feed | rdf | rss | rss2 | atom) /?", "index.php? author_name = $ matchningar [1] & feed = $ matchningar [2] , "topp");
Denna funktion kan nås även utan att använda variabeln $ wp_rewrite. Vissa utvecklare gillar den här metoden eftersom det är enklare än hårdkodning med klassegenskaper. Men jag har också märkt att den här metoden inte alltid är tillförlitlig för vissa WordPress-installationer. Det finns faktiskt ett andra alternativ att lägga till dessa regler på kroken efter att ha spolat din .htaccess (se nedan).
Författare bas med hjälp av generate_rewrite_rules
Att skriva för den här metoden behöver vi igen den globala $ wp_rewrite-klassen. Jag har sedan installerat en ny variabel som heter $ new_rules
som innehåller en associativ uppsättning data. Min exempelkod nedan omprövar bara för den grundläggande författarsidan.
funktion generate_author_rewrite_rules () global $ wp_rewrite; $ new_rules = array ("skrivare / ([^ /] +) /?" => "index.php? author_name =". $ wp_rewrite-> preg_index (1)); $ wp_rewrite-> rules = $ new_rules + $ wp_rewrite-> regler;
Men om vi vill inkludera flera sidor och RSS-feeds kan vi böja upp matrisen. Du har möjlighet att skapa en PHP-funktion för att trycka på associativ array-data som kan vara lite för komplex. Vi kan också dela datablock via kommatecken, beteende som separata enheter i arrayen. Kolla in min uppdaterade kod igen skrivet i functions.php temafil.
funktion generate_author_rewrite_rules () global $ wp_rewrite; $ new_rules = array ("författare / ([^ /] +) /?" => "index.php? author_name =". $ wp_rewrite-> preg_index (1), "författare / ([^ /] +) / sida /? ([0-9] 1,) /? "=>" Index.php? Author_name = ". $ Wp_rewrite-> preg_index (1)." & Paged = ". $ Wp_rewrite-> preg_index (2) "författare / ([^ /] +) / (feed | rdf | rss | rss2 | atom) /?" => "index.php? author_name =". $ wp_rewrite-> preg_index (1). $ wp_rewrite-> preg_index (2), "författare / ([^ /] +) / feed / (feed | rdf | rss | rss2 | atom) /?" => "index.php? author_name =". $ wp_rewrite- > preg_index (1). "& feed =". $ wp_rewrite-> preg_index (2)); $ wp_rewrite-> rules = $ new_rules + $ wp_rewrite-> regler;
Kom bara ihåg att ingen av dessa metoder kommer att fungera förrän du har spolat de ursprungliga omskrivningsreglerna. Du måste göra detta när du ändrar dessa funktioner, men efteråt kommer dina nya regler att hålla sig obestämt.
Spola omskrivningsreglerna
När du gör en uppdatering till URL-omskrivningskoden används inte ändringarna omedelbart. Du måste spola reglerna om .htaccess omskrivning så att din nya kod läggs till. Genom att göra detta på varje sida är init dock extremt slöseri när den skriver till databasen och uppdaterar hårdhäftigt .htaccess-filen.
En bättre metod är att komma åt din permalinks-sida i adminpanelen och spara ändringarna på nytt. Detta kallar alltid en flush_rewrite_rules så att du aldrig behöver oroa dig för användare på frontenden som upplever problem med att ladda in. Och det tar bara en gång att återställa sidan och uppdatera alla regler i ditt system. Men om det inte fungerar kan du prova att ringa $ Wp_rewrite-> flush_rules ();
Använda icke-WP-regler
Inuti $ wp_rewrite
klass vi har tillgång till dussintals egenskaper. En av de viktigaste alternativen är $ Wp_rewrite-> non_wp_rules
som samlar en rad omdirigeringar som inte slår index.php-filen.
Detta används egentligen oftast i WordPress plugin-utveckling. Du kan trycka en specifik anpassad URL-typ (t.ex. / / Juni-2012 kalender /
) till baksidan av din webbplats (/wp-content/plugins/calendarplug/myscript.php
). Men det finns naturligtvis ytterligare användningar för denna associativa uppsättning av anpassade omskrivningsregler än plugins. Jag har gett ett utmärkt exempel i sammanhanget nedan.
Maskering av dina temafiler
Detta är ett vanligt förslag som jag ser ofta på WordPress-diskussionsforum. Helst skulle vi vilja hänvisa vissa filer inuti / Wp-content / themes / Mytheme /
mapp med en mer elegant URL. Observera att detta kommer att kräva en annan uppsättning WordPress-omskrivningar för att ändra katalogstrukturen.
WordPress interna omskrivningssystem skjuter alltid innehåll mot en enda routingsfil. I standardfallet använder vi index.php tillsammans med eventuella extra frågesträngsdata. Men för att dölja vår standardmallkatalog (/ Wp-innehåll / teman / Mytheme / *
) vi måste visa många olika filer.
add_action ('generate_rewrite_rules', 'themes_dir_add_rewrites'); funktion themes_dir_add_rewrites () $ theme_name = next (explodera ('/ themes /', get_stylesheet_directory ())); global $ wp_rewrite; $ new_non_wp_rules = array ('css /(.*)' => 'wp-innehåll / teman /'. $ theme_name. '/ css / $ 1', 'js /(.*)' => 'wp-innehåll / teman / '. $ theme_name.' / js / $ 1 ',' images / wordpress-urls-rewrite /(.*) '=>' wp-innehåll / teman / '. $ theme_name.' / images / wordpress-urls-rewrite / $ 1 ',); $ wp_rewrite-> non_wp_rules + = $ new_non_wp_rules;
Jag har skrivit en ny funktion themes_dir_add_rewrites ()
att dra all huvudinnehåll från dessa längre webbadresser och omdirigera dem i backend. Observera att vi använder den här andra mystiska egenskapen i $ wp_rewrite klassen som heter non_wp_rules
. Enligt docs är dessa regler som inte riktar sig till WP: s index.php-fil och kommer att hanteras på serverns slut.
Vad som är så bra med dessa icke-WP-regler är att du fortfarande kan hantera den äldre URL-metoden ganska enkelt. Det finns inget som hindrar dig från att länka till:
/wp-content/themes/mytheme/images/wordpress-urls-rewrite/logo.jpg
.
Men det ser mycket trevligare om du kan referera:
/images/wordpress-urls-rewrite/logo.jpg
istället.
Användbara verktyg och plugin
Det finns bara några verktyg du kan använda om du fastnar med att koda dina egna vackra webbadresser. Processen är mycket svår att förstå, så bli inte avskräckt om du kämpar i några veckor. Jag känner att innehållet blir enklare när du spenderar mer tid på att träna.
Men för att komma igång, kolla in några av dessa praktiska omskrivningsverktyg och plugins. Du behöver nog inte alla, men det är kul att hitta en så stor utvecklarbas som arbetar kring WP-omskrivningar.
Monkeyman Rewrite Analyzer
När du först hoppar in i omskrivningsregler är det här plugin ett måste. Det ändrar inte något av reglerna för din webbplats - det låter dig bara testa kod och se vilka omdirigeringar som går till vilka sidor. Det kommer till och med att fungera för att testa anpassade sökvariabler för alla anpassade posttyper.
AskApache RewriteRules Viewer
Det här liknar pluginet ovan, förutom att det inte låter dig testa dina egna regler. Istället kommer det här pluginet att visa alla dina webbplatsens standard WP-regler och var de omdirigeras till. Detta kommer att innehålla alla huvudegenskaper hos $ wp_rewrite
som dina permalinkinställningar och sid / kategori / taggar baser.
WP htaccess Control
Här har du en annan uppsättning regler för att göra nya sidomändningar. Pluggen har sin egen adminpanel där du kan redigera variabler som din författarbas, sidbaser och till och med lägga till egna egna .htaccess-regler.
Denna metod är annorlunda jämfört med att du bygger din egen med wp_rewrite. Det kan dock vara lättare för tekniker som verkligen känner till webbservrar och känner sig mer bekväma skrivning direkt till .htaccess.
Omskriv Regel Tester
Det här är egentligen inte ett WordPress-plugin, men det är definitivt ett användbart verktyg för att behålla filen. Du kan kopiera omskrivningsregler och testa dem för din webbplats utan att någonsin redigera din .htaccess-fil. Det här är den perfekta metoden för att ta bort fel från din syntax innan du startar live på webben.
DW ReWrite
DW Rewrite är en mycket enkel plugin som skapar 3 unika vackra webbadresser direkt efter installationen. Som standard kommer det att ändra admin, inloggning och registreringslänkar till /administration
, /logga in
, och /Registrera
respektive.
Det här kan vara bra om du behöver en snabbkorrigering för en blogg som innehåller flera författare. Det kommer specifikt att gömma den pinsamt förknippade WordPress-registreringslänken (/wp-login.php?action=register
).
Slutsats
Jag hoppas att denna handledning kan ge några exempel för att få dig att tänka på WordPress rewrites. CMS är mycket populär och utvecklare producerar fortfarande nya funktioner varje dag. Att anpassa egna webbadresser är en så stor del av användarbaserad funktionalitet. Det ger din webbplats sin egen unika närvaro och branding jämfört med standardalternativen.
Om du har problem med omskrivningsregler bör det aldrig vara svårt att ångra skadan. Genom att helt enkelt radera funktionskoden och spola dina .htaccess-regler verkar det som om inget har ändrats. Var noga med att kolla in några andra liknande artiklar som du kan hitta om ämnet. Och om du har några frågor eller kommentarer kan du dela dem med oss i postdiskussionsområdet.