En permalänk är den länk som används för att komma åt ett visst innehåll på din webbplats.

Till exempel är Kinstas hemsida https://kinsta.com/, vår blogg är https://kinsta.com/blog/ och ett enskilt inlägg använder en länk som https://kinsta.com/blog/wordpress-widgets/.

Permalänkar används också för arkivsidor, statiska sidor och det innehåll på din webbplats som behöver sin egen webbadress.

I det här inlägget visar vi hur permalänkar fungerar, hur du optimerar dem för din webbplats och hur du konfigurerar dem via inställningsskärmen och genom att skriva lite kod.

Vad är WordPress-permalänkar?

WordPress-permalänkar definieras av den officiella WordPress Codex som:

”De permanenta webbadresserna till dina enskilda webblogginlägg, samt kategorier och andra listor över webblogginlägg.”

Varje sida på din webbplats (inklusive inlägg, sidor, arkivsidor och andra sidor som 404-sidan) kommer att ha sin egen permalänk.

Till exempel kommer din hemsida att vara på yoursite.com, medan din blogg är på yoursite.com/blogg.

Om du har en ”Utvalda”-kategori i din blogg, kan den ligga på ett antal olika webbadresser:

  • yoursite.com/category/featured
  • yoursite.com/blog/featured eller bara
  • yoursite.com/featured.

Enskilda inlägg har också sin egen permalänk. I dina temamallfiler kommer malltaggen the_permalink() att användas för att hämta webbadressen till ett inlägg och skapa en klickbar länk från det.

WordPress använder detta för att hämta den unika permalänken för det enskilda inlägget och mata ut det inom ett <a>-element så att det kan användas som en länk i dina blogginläggslistor.

Det fina med att ha denna malltag är att du bara behöver använda den lilla biten kod för att hämta länken till ett inlägg på din webbplats, och du behöver inte hårdkoda några länkar i ditt tema.

Skillnaden mellan permalänkar, slugs och länkar

I det här inlägget kommer vi att fokusera på permalänkar i detalj, men vi kommer också att titta på slugs, så vad är skillnaden mellan dem?

Permalänken är hela länken till ett inlägg. Så länken jag gav tidigare till ett Kinsta-inlägg om widgets är https://kinsta.com/blog/wordpress-widgets/.

Sluggen är den sista delen av en permalänk, och är unik för det inlägget. I det här fallet är det wordpress-widgets.

Sluggen genereras automatiskt för dig baserat på titeln på ett inlägg. Men om du vill skapa en slug manuellt för ett inlägg kan du göra det. Jag ska visa dig hur (och varför du kanske borde göra det) senare i det här inlägget.

Så skapas WordPress-permalänkar

På en statisk webbplats identifierar en URL en resurs med namn och sökväg, som du kan se i följande exempel:

https://example.com/path/to/resource/wordpress-permalinks.html

För att ha välstrukturerade webbadresser behöver vi bara ett välstrukturerat filsystem och korrekt namngivna resurser.

Men webben är dynamisk, och vi är vana vid att hantera webbplatser med databasdrivna CMS, vilket betyder att webbadresser kommer att innehålla ett antal parametrar vars värden bestämmer den förfrågan som ska göras mot databasen.

Överväg följande exempel:

https://example.com/?key1=val1&key2=val2

I den här webbadressen kommer du att märka en avgränsare (frågetecknet) och en uppsättning nyckel-/värdepar (åtskilda av et-tecknet) som utgör frågesträngen. Webbadressen uppfyller inte användbarhets- och tillgänglighetskraven och bör omvandlas till en mer meningsfull och SEO-vänlig permalänk.

Hur dessa ”fula” webbadresser omvandlas till optimerade permalänkar beror på din webbserver. Om du är en Apache-användare måste du lägga till en uppsättning omskrivningsdirektiv i rotmappens .htaccess-fil. Om du är en Nginx-användare behöver du lägga till ett try_files-direktiv i huvudkonfigurationsfilen.

Men oroa dig inte! För det mesta behöver du inte konfigurera webbservern rad för rad eftersom WordPress kommer att göra det åt dig.

Som administratör kan du snabbt och enkelt ställa in egna omskrivningsregler från adminpanelen. Avancerade användare och utvecklare kan få ännu mer hjälp tack vare WordPress omskrivnings-API, som tillhandahåller funktioner och krokar som ger dig permalänksanpassning på en högre nivå.

En översikt över WordPress-förfrågningar

Med det specifika syftet att bygga förfrågningen, exekvera den och lagra resultat från WordPress-databasen, tillhandahåller WordPress klassen WP_Query. Tack vare den här klassen behöver vi inte bry oss om förfrågningen eftersom WP Query automatiskt kommer att hantera, bygga och exekvera förfrågningen. Sedan, enligt mallhierarkin, kommer WordPress att returnera den begärda resursen.

WordPress tillåter direkt förfrågningar om enskilda inlägg, sidor, inläggstyper, samt för ett antal arkiv som ordnas efter kategori, tagg, datum, författare och mer.

Om standardfunktionerna inte räcker till kan utvecklare också bygga egna förfrågningar genom att skapa nya instanser av WP_Query-klassen (förfrågningsobjektet) eller skicka specifika parametrar till en befintlig instans av förfrågningen innan den körs.

Frågeparametrarna kallas frågevariabler, query vars, och är indelade i tre grupper.

Offentliga query vars

Dessa variabler är offentliga i den meningen att de är tillgängliga att användas i offentliga förfrågningar (dvs. webbadresserna). Tack vare dessa variabler kan vi be om inlägg sorterat efter författare:

?author=12?
author_name=mickey

Per kategori eller tagg:

?cat=4,5,6
?category_name=CMS
?tag=wordpress

Datum och tid:

?monthnum=201601
?year=2015?w=13
?day=31

Per inlägg eller sida:

?p=123
?name=hello-world
?page_id=234

Och mycket mer.

Privata query vars

Dessa variabler är inte gjorda för att läggas till i URL-frågesträngar. De kan användas för att påverka förfrågningar inom bara ett skript (ett plugin eller ett temas functions.php-fil).

Följande frågesträng skulle inte returnera det förväntade resultatet:

?meta_key=city&meta_value=London

meta_key och meta_value är privata frågevariabler som inte ska definieras i frågesträngar. De bör skickas till en instans av frågeobjektet, som jag kommer att visa dig senare.

Se den fullständiga listan över offentliga och privata frågevariabler i Codex.

Anpassade query vars

Dessa användardefinierade variabler kan skickas via URL-frågesträngar ungefär som offentliga frågevariabler. Den största skillnaden mellan offentliga och anpassade variabler är att WordPress inte kommer att hantera anpassade variabler på egen hand, och vi bör få deras värden från ett plugin för att anpassa förfrågningar.

Med det sagt, låt oss komma tillbaka till ämnet permalänkar.

Fula WordPress-permalänkar och Query vars

Fula permalänkar visar frågesträngen, dvs. den del av webbadressen som innehåller en uppsättning frågevariabler, query vars,
(frågesträngen) som bestämmer den returnerade resursen.

Plain setting in Permalinks settings screen
Plain setting in Permalinks settings screen

Tänk till exempel på följande webbadresser:

https://example.com/?cat=5
https://example.com/?cat=5,7,9

Som svar på dessa webbadresser skulle WordPress returnera ett arkiv av inlägg som tillhör de angivna kategorierna.

Vi är inte begränsade till bara en parameter per URL. I följande exempel bygger vi mer komplexa förfrågningar:

?author_name=lucy&category_name=WebDev?tag=wordpress&m=201606

I den första frågesträngen begär author_name och category_name alla inlägg av den angivna författaren i WebDev-kategorin. I den andra frågesträngen kommer tagg och m att begära alla inlägg taggade som ”wordpress” och som publicerades i juni 2016.

Som du kan se kan vi ställa in mer än en frågevariabel och tvinga WordPress att köra avancerade förfrågningar bara genom att lägga till lämplig nyckel=värdepar till frågesträngarna.

Fina permalänkar: ett bättre alternativ

Genom att aktivera fina permalänkar skapar vi en användbar, tillgänglig och SEO-vänlig URL-struktur. Låt oss jämföra följande webbadresser:

https://example.com/?p=123
https://example.com/wordpress-permalinks/

I det här exemplet visar den fula permalänken p-variabeln och dess värde (post-ID), medan den fina webbadressen visar inläggssluggen.

WordPress ger fyra fina permalänksformat som vi kan välja mellan i permalänksinställningsskärmen, som visas i bilden nedan.

Fina permalänkar i permalänksinställningar
Fina permalänkar i permalänksinställningar

Men du är inte begränsad till standardformat, eftersom WordPress låter dig anpassa det fina permalänksformatet genom att ställa in en eller flera strukturtaggar.

Anpassat strukturalternativ
Anpassat strukturalternativ

Jag ska visa dig detta mer i detalj senare i det här inlägget.

Varför är fina permalänkar viktiga?

Att använda fina permalänkar för din WordPresswebbplats har två fördelar: SEO och användarupplevelse.

Varför det? Sökmotorer använder din URL som en indikation på vad inlägget handlar om. Om innehållet i permalänken berör innehållet i ditt inlägg kommer det att hjälpa sökmotorer förstå vad ditt inlägg handlar om och att det är faktiskt handlar om vad det påstår sig göra.

För UX är fina permalänkar bättre eftersom de gör det lättare för användare att komma ihåg och använda webbadresser på din webbplats. Ingen kommer att komma ihåg webbadressen till din kontaktsida om den är yoursite.com/?p=456. Men de kommer att minnas yoursite.com/contact..

Permalänkar, slugs, och SEO

Inläggets slug är den allra sista delen av ett inläggs webbadress. Om du har konfigurerat inställningar för WordPress-permalänkar så att inläggets namn används, kommer sluggen för ett inlägg som heter ”Så skapar du fina permalänkar” automatiskt att genereras som yoursite.com/sa-skapar-du-fina-permalankar/.

Det är en bra slug. Den berättar för användarna vad inlägget handlar om och för sökmotorer innehåller den ”fina permalänkar”, vilket kan vara det sökord du riktar in dig på.

Men den kan förbättras.

Dina slugs borde vara tillräckligt långa för att inkludera de sökord du vill ha, men tillräckligt kort för att användare ska kunna komma ihåg dem, och inte förvirra sökmotorer med massor av onödiga ord (så här skapar du SEO-vänliga permalänkar i WordPress).

Så för ett inlägg som heter ”Så skapar du fina permalänkar” kan det passa bättre med en slug som fina-permalankar, vilket ger dig yoursite.com/fina-permalankar/. Om du har flera inlägg om fina permalänkar och vill ge den här en specifik slug som rör det faktum att det är en guide, kan du använda skapa-fina-permalankar, vilket ger dig yoursite.com/skapa-fina-permalankar.

Vidare kan du förbättra SEO ännu mer genom att inkludera ”WordPress”: example.com/skapa-wordpress-fina-permalankar.

När folk ser din länk i ett sökresultat, vill du inte att sökresultatet ska vara så långt att inte hela länken kan läsas. Nedan är två resultat jag fått från Kinstabloggen när jag googlade ”wordpress permalänkar”.

Google resultat – WordPress-permalänkar
Google resultat – WordPress-permalänkar

Båda dessa har väl optimerade slugs. Den första är wordpress-premalinks-url-rewriting, vilket indikerar att den riktar sig mot dessa sökord, och den andra är wordpress-slug, vilket är ännu mer fokuserat.

Dessa slugs slösar inte några ord. De berättar för sökmotorerna vad inlägget handlar om och inget annat.

Du kan optimera dina slugs för SEO först genom att välja inläggsnamn i skärmen permalänksinställningar och sedan genom att manuellt redigera sluggen för varje inlägg när du skriver det.

Permalänkar, slugs och UX

Med hjälp av fina permalänkar och korta, minnesvärda slugs kommer du också att få fördelar i användarupplevelsen.

Enligt ett inlägg från 1999 av Jacob Nielsen kräver en användarvänlig webbplats:

  • ett domännamn som är lätt att komma ihåg och lätt att stava.
  • korta webbadresser.
  • webbadresser som är lätta att skriva
  • Webbadresser som visualiserar webbplatsstrukturen.
  • Webbadresser som är ”hackbara”, som kan låta användare flytta till högre nivåer av informationsarkitekturen genom att ta bort slutet av webbadressen.
  • beständiga webbadresser som inte ändras.

En webbadress borde aldrig ändras, eftersom den kan lagras och delas på många sätt. Det är därför vi kallar dem permalänkar. Dessutom bör en URL vara semantisk, i den meningen att den är omedelbart och intuitivt meningsfull för användare som inte är experter.

Så medan det är möjligt att ändra permalänken för ett inlägg efter att du har publicerat det, är det ingen bra idé. Det beror på att den ursprungliga permalänken kanske redan har delats. Om du behöver ändra den, se till att följa WordPress bästa praxis för omdirigering.

Så här ändrar du permalänksinställningar i WordPress

I WordPress kan du ändra permalänkarna på ett antal sätt:

  • Du kan redigera skärmen permalänksinställningar för att slå på fina permalänkar – något du bör göra så fort du ställer in din webbplats.
  • Du kan redigera permalänkstrukturen för taggar och kategorier under permalänkskärmen.
  • Du kan redigera slugs för enskilda inlägg när du skapar och redigerar dem.
  • Du kan skapa en struktur för länkar till anpassade inläggstyper när du registrerar dem, och välja att använda standard eller att åsidosätta den.
  • Du kan skriva ett plugin för att ändra hur permalänkar är strukturerade.
  • Du kan använda omdirigeringar för att få en gammal permalänk att peka till en ny.

Låt oss ta en titt på var och en av dessa.

Redigera övergripande permalänksinställningar

Skärmen permalänksinställningar är det första stället att gå för att konfigurera dina permalänkar. Öppna den via Inställningar > Permalänkar.

Skärmen permalänksinställningar
Skärmen permalänksinställningar

Vanliga inställningar

Det första avsnittet handlar om inställningar för enskilda inlägg. Alternativen är:

  • Enkel: detta använder inläggets ID-nummer som länk. Det kommer att vara logiskt för webbläsaren, men betyder inte särskilt mycket för människor eller sökmotorer. Det ser ut så här: example.com/?p=123.
  • Dag och namn: Detta inkluderar det fullständiga datumet inlägget publicerades på samt dess namn (eller mer exakt dess slug). Det ser ut så här: example.com/2020/06/01/mitt-inlägg/.
  • Månad och namn: Detta är en kortare version av dag och namn, med bara månad och år och inte dagen: example.com/2020/06/mitt-inlägg/.
  • Numerisk: precis som det enkla alternativet använder detta inläggets ID och är inte särskilt användarvänligt. example.com/archives/123.
  • Inläggets namn: Det här alternativet inkluderar INTE några datum eller inläggs-ID utan använder bara sluggen: example.com/mitt-inlägg/.
  • Anpassad struktur: här kan du skapa din egen struktur. Använd taggar för att hämta information baserat på inläggsdata och statisk text för att lägga till något som inte kommer ändras mellan inlägg.

Dessa taggar är specifika sökord som är omslutna av %-tecknet. WordPress använder följande taggar:

  • %year% – publiceringsår (fyra siffror).
  • %monthnum% – publiceringsmånad (två siffror).
  • %day% – publiceringsdag (två siffror).
  • %hour% – publiceringstimme (två siffror).
  • %minute% – publiceringsminut (två siffror).
  • %second% – publiceringssekunden (två siffror).
  • %post_id% – inläggets unika ID (heltal).
  • %postname% – inläggets slug (dvs. strängen som representerar inläggets titel).
  • %category% – kategorisluggen.
  • %author% – författarsluggen.

Prova att klicka på knappen Anpassad struktur och lägga till en av följande strängar i textfältet:

  • /%author%/%postname%/
  • /%year%/%postname%/
  • /%category%/%postname%/

Alla dessa strängar genererar olika fina permalänkar med specifika semantiska värden, som visas nedan:

example.com/rachelmccollin/wordpress-permalinks/
example.com/2020/wordpress-permalinks/
example.com/CMS/wordpress-permalinks/

I det första exemplet markerar den resulterande webbadressen författaren av inlägget. De andra två formaten visar oss året för publicering respektive inläggets kategori. Det är upp till dig att välja det format som passar dig bäst.

När du har valt det alternativ du vill ha, går du antingen vidare till avsnittet Valfritt eller klicka på Spara ändringar för att spara dina inställningar.

Valfria permalänksinställningar

Förutom inställningarna för dina enskilda inlägg kan du också ställa in en egen struktur för dina kategori- och taggarkiv på skärmen permalänksinställningar.

Om du inte gör det är standard att inkludera /kategori/kategori-slug/ i slutet av permalänken. Så om du har en kategori av ”utvalda” inlägg, skulle deras arkivsida vara yoursite.com/kategori/utvalda.

Valfria permalänksinställningar
Valfria permalänksinställningar

Du kan ändra detta under Valfritt-avsnittet på sidan Permalänksinställningar. Så om du vill ha yoursite.com/blogg/utvald/ som permalänk för det kategoriarkivet, kan du ange blogg i kategorifältet. Du behöver inte infoga snedstreck, eller använda taggar.

Så ändrar du permalänkar och slugs för enskilda inlägg och sidor

När du har aktiverat fina permalänkar på din WordPresswebbplats är det dags att optimera sluggen för enskilda inlägg och sidor.

Det är bäst att göra detta när du skapar ditt innehåll. Om du ändrar ett inläggs slug kommer du att ändra webbadressen den använder, och eventuella länkar som du eller dina besökare delat tidigare kommer inte längre att fungera.

För att redigera ett inläggs slug tittar du i redigeringsskärmen för det inlägget. Gå till inlägg och välj det inlägg du vill redigera. (Om du håller på att skapa inlägget kommer du redan att vara på rätt skärm.)

På redigeringsskärmen väljer du Dokumentfönstret till höger och går till permalänksektionen. Klicka på pilen till höger om den om den inte redan är öppen.

Permalink editing in post editing screen
Permalink editing in post editing screen

Den automatiskt genererade sluggen kommer att visas i Slug-fältet. Du kan redigera detta för att göra sluggen kortare och mer fokuserad.

Innan du redigerar den, kopiera den gamla sluggen så att du kan använda den om du behöver ställa in en omdirigering efteråt (detta gäller endast för tidigare publicerade inlägg).

Slug redigerad
Slug redigerad

Klicka nu på knappen Publicera eller Uppdatera för att spara dina ändringar.

Glöm inte: om du har redigerat sluggen för ett befintligt inlägg kan du ha skapat problem för personer som använt den ursprungliga länken och behöver använda omdirigeringar.

Så här ändrar du permalänksinställningar för arkivsidor

Om du vill ändra permalänksinställningar för enskilda arkivsidor kan du redigera inställningarna för ”kategori” eller ”tagg”-basen på skärmen för permalänksinställningar. Du kan också ändra sluggen för en enskild kategori, tagg eller anpassad taxonomi.

Låt oss ta en titt på hur du gör det, och sedan gå vidare till redigeringen av permalänkar för anpassade taxonomier och inläggstyper när du registrerar dem.

Ändra slugs för kategorier och taggar

För att göra detta, gå till Inlägg > Kategorier (eller Inlägg> Taggar).

Kategoriredigering
Kategoriredigering

Hitta den kategori eller tagg vars slug du vill redigera och klicka på dess namn.

Redigera en kategorislug
Redigera en kategorislug

Du kan sedan skriva in en slug för kategorin eller taggen. WordPress genererar automatiskt en slug baserat på namnet på kategorin eller taggen, men du behöver inte behålla den. Som med inlägg är det klokt att göra detta när du ställer in kategorin eller taggen. Om du gör det senare måste du ställa in en omdirigering.

Om du ställer in en anpassad taxonomi, eller om en skapas av ett plugin, kan du redigera sluggarna för enskilda termer i den taxonomin på exakt samma sätt. Men om du vill redigera taxonomins egen slug, måste du redigera lite kod.

Ändra slugs för anpassade taxonomier

När du registrerar en anpassad taxonomi kommer arkivsidorna för den taxonomin automatiskt att ha en URL som yoursite.com/taxonomi/term, där taxonomi är taxonomins ID och term är term-sluggen.

Låt oss föreställa oss att du registrerar en anpassad taxonomi för språk med ID-numret för kinsta_language, som använder ett prefix för att säkerställa att det skiljer sig från andra taxonomier som registrerats av andra plugins. Du kan sedan skapa en term med franska som slug.

Webbadressen för arkivet för den taxonomitermen skulle vara yoursite.com/kinsta_language/franska.

Men vad händer om du vill ändra det så att det inte inkluderar det prefixet och är mer användarvänligt? Du kan göra detta med hjälp av omskrivningsargumentet när du registrerar taxonomin.

Det här är koden du skulle använda för att registrera taxonomin, inklusive omskrivningsargumentet.

function kinsta_register_taxonomy() {                

 // languages
 $labels = array(
  'name'=> __( 'Languages' ),
  'singular_name' => __( 'Language' ),
  'search_items' => __( 'Search Languages' ),
  'all_items' => __( 'All Languages' ),
  'edit_item' => __( 'Edit Languages' ),
  'update_item' => __( 'Update Languages' ),
  'add_new_item' => __( 'Add New Language' ),
  'new_item_name' => __( 'New Language Name' ),
  'menu_name' => __( 'Languages' ),
 );

 $args = array(
  'labels' => $labels,
  'hierarchical' => true,
  'sort' => true,
  'args' => array( 'orderby' => 'term_order' ),
  'rewrite' => array( 'slug' => 'language' ),
  'show_admin_column' => true,
  'show_in_rest' => true
 );

 register_taxonomy( 'kinsta_language', array( 'post', 'attachment' ), $args);   

}

add_action( 'init', 'kinsta_register_taxonomy' );

Den viktiga raden i den koden är den här:

'rewrite' => array( 'slug' => 'language' ),

Det skriver om den sluggen från kinsta_language (ID-numret) till språk (det nya värdet). Så din nya webbadress skulle vara yoursite.com/språk/franska. Mycket mer användarvänligt!

Så här ändrar du din slug för anpassade inläggstyper

Anpassade inläggstyper fungerar på samma sätt som anpassade taxonomier när du registrerar dem, så de har en URL som innehåller ID-numret för den anpassade inläggstypen.

Låt oss föreställa oss att du registrerar en anpassad inläggstyp som heter kinsta_book och du skapar ett inlägg av den inläggstypen som kallas ”Huckleberry Finn”, med sluggen huckleberry-finn.

Webbadressen skulle vara yoursite.com/kinsta_book/huckleberry-finn. Och sluggen för inläggstypens arkiv skulle vara yoursite.com/kinsta_book.

Återigen kan du ändra detta när du registrerar den anpassade inläggstypen, med hjälp av rewrite-argumentet. Och det här är koden inklusive argumentet:

function kinsta_register_post_type() {

 // books
 $labels = array(
  'name' => __( 'Books' ),
  'singular_name' => __( 'Book' ),
  'add_new' => __( 'New Book' ),
  'add_new_item' => __( 'Add New Book' ),
  'edit_item' => __( 'Edit Book' ),
  'new_item' => __( 'New Book' ),
  'view_item' => __( 'View Book' ),
  'search_items' => __( 'Search Books' ),
  'not_found' =>  __( 'No Books Found' ),
  'not_found_in_trash' => __( 'No Books found in Trash' ),
 );

 $args = array(
  'labels' => $labels,
  'has_archive' => true,
  'public' => true,
  'hierarchical' => false,
  'supports' => array(
   'title',
   'editor',
   'excerpt',
   'custom-fields',
   'thumbnail',
   'page-attributes'
  ),
  'taxonomies' => array( 'kinsta_language', 'category'),
  'rewrite'   => array( 'slug' => 'book' )
 );
 
 register_post_type( 'kinsta_book', $args );

}

add_action( 'init', 'kinsta_register_post_type' );

Den viktiga raden för sluggen är den här:

'rewrite'   => array( 'slug' => 'book' )

Så nu kommer webbadresserna att vara yoursite.com/book/huckleberry-finn för en enskild bok och yoursite.com/book för arkivet.

Redigera permalänkar med anpassade fält

Förutom offentliga och privata query vars låter WordPress utvecklare och avancerade användare definiera sina egna anpassade query vars. När de har registrerats kan dessa variabler läggas till frågesträngar, precis som offentliga query vars, och deras värden kan också användas för att påverka förfrågningar.

Så här bygger du en anpassad metaförfrågning (dvs. en förfrågning som hämtar inlägg efter anpassat fält) som använder anpassade query vars.

För att uppnå detta mål kommer vi att utveckla ett plugin från vilket vi registrerar anpassade variabler, hämtar deras värden och ändrar förfrågningen i enlighet därmed.

Så här gör vi…

Skapa ett plugin i katalogen wp-content/plugins. Lägg till en funktion för att registrera frågevariablerna:

/**
 * Register custom query vars
 *
 * @param array $vars The array of available query variables
 */

function myplugin_register_query_vars( $vars ) {

 $vars[] = 'city';
 return $vars;

}

add_filter( 'query_vars', 'myplugin_register_query_vars' );

Med query_vars-filtret kan du lägga till, ta bort eller ändra offentliga query vars innan förfrågningen utförs. Callback-funktionen i exemplet lagrar som argument en array av de tillgängliga variablerna, lägger till en ny variabel och returnerar samma array.

Lägg sedan till den här funktionen som använder värdet på variabeln för att ändra förfrågningen:

/**
 * Build a custom query
 *
 * @param $query obj The WP_Query instance (passed by reference)
 *
 */

function myplugin_pre_get_posts( $query ) {

 // check if the user is requesting an admin page
 // or current query is not the main query
 if ( is_admin() || ! $query->is_main_query() ){
  return;
 }

 $city = get_query_var( 'city' );

 // add meta_query elements
 if( !empty( $city ) ){
  $query->set( 'meta_key', 'city' );
  $query->set( 'meta_value', $city );
  $query->set( 'meta_compare', 'LIKE' );
 }

}

add_action( 'pre_get_posts', 'myplugin_pre_get_posts', 1 );

Åtgärdskroken pre_get_posts utlöses efter att förfrågningen har skapats men innan den körs. Så vi kan kroka på en callback-funktion på denna åtgärd för att göra våra ändringar i förfrågningen innan den körs. Det här är vad som händer:

  • Callback-funktionen håller en instans av $query-objektet, som skickas efter referens, inte värde. Det innebär att eventuella ändringar av frågeobjektet påverkar den ursprungliga förfrågningen och inte en kopia av den. Av denna anledning måste vi vara säkra på vilken förfrågning som ska exekveras (huvudförfrågningen).
  • Senare får vi värdet city från den aktuella frågesträngen tack vare https://codex.wordpress.org/Function_Reference/get_query_varget_query_var-funktionen.
  • Slutligen, om $city inte är tom kan vi ställa in meta query-elementen meta_key, meta_value och meta_compare. Dessa sistnämnda är privata query vars som inte är tillgängliga för offentliga förfrågningar. Deras värden kan bara ställas in från inuti scriptet.

Aktivera nu pluginet, lägg till det anpassade fältet ”city” i ett antal inlägg. Gå till Inställningar > Permalänkar för att uppdatera permalänkarna, du behöver faktiskt inte göra någonting. bara att besöka skärmen är tillräckligt.

Kontrollera nu webbadresser enligt följande:

https://example.com/?city=London

Som svar på denna begäran borde WordPress returnera alla inlägg med fältet City vars värde är London.

Vår sista uppgift är att konvertera den fula webbadressen i exemplet ovan till en fin permalänkstruktur. Låt oss lägga till följande funktion till vårt plugin:

/**
* Add rewrite tags and rules
*/

function myplugin_rewrite_tag_rule() {

 add_rewrite_tag( '%city%', '([^&]+)' );
 add_rewrite_rule( '^city/([^/]*)/?', 'index.php?city=$matches[1]','top' );

}

add_action('init', 'myplugin_rewrite_tag_rule', 10, 0);

Funktionerna add_rewrite_tag och add_rewrite_rule ingår i omskrivnings-APIn. add_rewrite_tag gör WordPress medveten om denna query var, medan add_rewrite_rule anger en ny omskrivningsregel. Båda funktionerna bör vara krokade på init-åtgärden. Tack vare en ny tagg och regel kan vi använda följande URL:

https://example.com/city/London/

WordPress kommer att returnera ett arkiv med inlägg där det anpassade fältet citys värde är London.

Obs! När en ny omskrivningsregel läggs till måste WordPress-permalänkarna uppdateras från permalänkskärmen under Inställningar på adminmenyn.

Så här ändrar du permalänkar i WooCommerce

WooCommerce skapar anpassade inläggstyper och taxonomier av sig själv, som alla har standard-permalänkar som är definierade av pluginet.

Du kan redigera permalänksinställningarna och sluggarna för dem allihop.

Ändra permalänkar för produktkategori, tagg och attribut

Det finns två sätt att redigera permalänkar för produktkategorier, taggar och attribut: strukturen och sluggen. Dessa fungerar på ett liknande sätt som vanliga kategorier och taggar.

För att redigera permalänkstrukturen, gå till Inställningar > Permalänkar och hitta Valfritt-avsnittet, där WooCommerce har lagt till några extra fält.

Valfria permalänksinställningar med WooCommerce installerat
Valfria permalänksinställningar med WooCommerce installerat

Här kan du redigera inställningarna för permalänkar för de tre anpassade taxonomierna som läggs till av WooCommerce:

  • Produktkategorier: Standardvärdet är /product-category/ men du kan ändra detta om du använder annan terminologi i din butik. Se till att din ändring inte skapar konflikter med dina inställningar för vanliga kategorier, vilket inte är samma sak.
  • Produktetiketter: standard är /product-tag/, och du kan ändra detta om du vill. Se till att du undviker en konflikt med vanliga inläggstaggar.
  • Produktattribut: dessa fungerar lite annorlunda än de andra två taxonomierna och har en annan struktur. Vad du än lägger till här kommer alltid att följas av sluggen för det enskilda attributnamnet (t. ex. storlek) och själva attributet (termen, t.ex. stor).

Om du vill redigera en slug för en enskild kategori eller tagg, gå till Produkter > kategorier (eller produkter > taggar) och redigera dessa på samma sätt som du skulle göra för inläggstaggar och -kategorier.

Redigera Produktkategori-sluggen
Redigera Produktkategori-sluggen

Att redigera attribut är annorlunda eftersom du inte bara har själva attributet utan också attributets termer.

Börja med att gå till Produkter > Attribut.

Produktattribut-skärmen
Produktattribut-skärmen

När du skapar ett nytt attribut använder du Slug-fältet för att ställa in sluggen på samma sätt som för en tagg eller kategori. För att redigera en slug för ett befintligt attribut kan du klicka på länken Redigera under attributet i den högra listan.

Redigera slug för produktattribut
Redigera slug för produktattribut

Klicka på Uppdatera för att spara ändringarna.

Om du vill redigera en slug för attributtermer går du till attributskärmen och klicka på länken Konfigurera termer bredvid det attributet. Detta tar dig till listan över termer för det attributet.

Lista på produktattributstermer
Lista på produktattributstermer

Redigera nu din slug för den termen precis som för en kategori eller tagg. Denna kommer sedan att läggas till i webbadressen för arkivet för produkter som har den termen.

Ändra Produktpermalänkar

Du redigerar produktpermalänkar via Inställningar > Permalänkar. Bläddra ner till avsnittet Produktpermalänkar.

Produktpermalänksinställningar
Produktpermalänksinställningar

Här kan du välja mellan fyra permalänksinställningar för dina produkter:

  • Standard: om du redan har aktiverat fina permalänkar, kommer detta att använda sluggen för varje produkt med basen /product/.
  • Shop-bas: istället för att använda /product/, kommer din butik att använda /shop/.
  • Shop-bas med kategori: infogar kategorin för den aktuella produkten i webbadressen. Detta kan lägga till sökord som du vill rikta in dig på om dina produktkategorier återspeglar dem, men kommer inte att hjälpa din användarupplevelse eftersom det skapar långa webbadresser.
  • Anpassad bas: skapar din egen URL-struktur med de ord som passar din butik. Du kan inte ta bort basen helt, du måste använda något.

När du har valt det alternativ du vill ha, klickar du på knappen Spara ändringar för att spara ditt val.

Du kan också redigera en slug för en enskild produkt i produktredigeringsskärmen, på exakt samma sätt som för ett inlägg eller en sida.

Så här ändrar du WordPress-permalänkar med ett plugin

Du kan använda ett tredjepartsplugin för att göra ändringar i dina permalänksinställningar utöver vad den vanliga permalänksinställningsskärmen låter dig göra.

WordPresspluginet Custom Permalinks
WordPresspluginet Custom Permalinks
  • Pluginet Custom Permalinks låter dig ställa in webbadressen till en inläggskategori eller tagg till vad du vill. Det gör också iordning omdirigeringar så att de gamla webbadresserna fortfarande fungerar.
  • Pluginet Permalink Manager Lite stöder anpassade inläggstyper, samt anpassade taxonomier i pro-versionen. Det innehåller också omdirigeringar och fungerar med tredjepartsplugins som WooCommerce och Yoast.

Så här ändrar du WordPress-permalänkar i phpMyAdmin

Om du vet vad du gör och är säker på att du inte kommer att förstöra något, kan du också redigera permalänkar i phpMyAdmin.

Detta är något du kan behöva göra om du inte kan komma åt skärmen permalänksinställningar av någon anledning.

Börja med att säkerhetskopiera din databas. Du kommer att direkt redigera den, så det är viktigt att säkerhetskopiera ifall du skulle göra ett misstag.

Öppna phpMyAdmin.

Om du är Kinstakund gör du detta genom att logga in på MyKinsta och sedan välja den webbplats du vill jobba på.

Bläddra neråt och klicka på knappen Öppna phpMyAdmin.

Öppna phpMyAdmin i MyKinsta
Öppna phpMyAdmin i MyKinsta

Skriv in din databas användarnamn och lösenord för att komma åt phpMyAdmin. Du kan hämta dessa från infoskärmen.

Klicka på fliken Databaser högst upp och välj sedan den Databas du vill jobba på.

Databasstruktur i phpMyAdmin
Databasstruktur i phpMyAdmin

Välj wp_options-tabellen och hitta posten permalink_structure i kolumnen option_name. Du kan behöva navigera förbi den första sidan med poster.

Hitta posten permalink_structure
Hitta posten permalink_structure

Klicka på länken Redigera till vänster för den posten, och under fältet option_value lägger du sedan till permalänkstrukturen som du vill använda. Använd taggarna som vi identifierade tidigare under Permalänksinställningar.

Redigera permalänkstrukturen
Redigera permalänkstrukturen

Klicka på . Nu kommer dina permalänkar att uppdateras.

För ytterligare läsning, kolla in vår artikel: Hur du ändrar din WordPress URL eller video:

Jobba med permalänkar för bilder

Bilder har helt egna permalänkar och varje bild eller mediefil du laddar upp till din webbplats kommer att få ett antal länkar:

  • Länken till bilden du laddade upp – den ursprungliga bilden.
  • Länkar för de nya bilderna som genereras med hjälp av de mediestorlekar du ställer in via Inställningar > Media.

Länken till originalbilden

När du laddar upp en bild skapas en unik länk till filen där den lagras på din server. Detta kommer att inkludera sökvägen till den plats där den lagras, vilket är wp-content/uploads.

Den kommer också att innehålla det datum då du laddade upp bilden. Detta innebär att om du laddar upp en annan bild med samma filnamn nästa månad (eller nästa år) kommer inte bilderna att blandas ihop, eftersom de kommer att ha unika sökvägar.

Om du laddar upp en bild som heter funnycat.jpg den 1 april 2020 kommer dess länk att vara yoursite.com/wp-content/uploads/04/funnycat.jpg. Siffran 04 indikerar att filen laddades upp i april. WordPress skapar en numrerad mapp i katalogen uploads för varje månad.

Om du laddade upp en fil som inte var en bild skulle webbadressen fungera på samma sätt: yoursite.com/wp-content/uploads/04/document.pdf

Om du laddar upp mer än en fil med samma namn under en viss månad, kommer WordPress att lägga ett nummer till slutet av filnamnet. Så om jag laddar upp en annan bild som heter funnycat.jpg kommer den att få namnet funnycat-1.jpg.

Om du någonsin behöver länka till originalbilden eller hitta den för att kontrollera att den fungerar korrekt, hittar du länken så här.

Du kan också hitta länken till en bilaga genom att gå till Media > bibliotek och klicka på filen. Redigeringsskärmen visas för den filen och du kan hitta dess URL i fältet Fil-URL på höger sida.

Ursprunglig bildlänk
Ursprunglig bildlänk

Du kan också länka till filen med funktionen wp_get_attachment_image() som WordPress tillhandahåller. Detta är en bättre praxis eftersom det innebär att länken inte kommer att ändras om bilagan flyttas i framtiden. Detta är en funktion som du kan använda i ett plugin eller en temamallfil, och den använder filens unika ID-nummer

I fallet med min funnycat.jpg-bild, är ID-numret 4995. Jag kan få detta genom att gå till bildredigeringsskärmen och klicka på webbadressen längst upp i webbläsarfönstret. De sista siffrorna kommer att vara ID-numret.

För att hämta den här bilden i en mallfil eller ett plugin skulle jag använda den här koden:

<?php wp_get_attachment image( ‘4995’ ); ?>

Detta skulle hämta bilden i fullstorlek. Om jag ville mata ut den skulle jag lägga till ett eko:

<?php echo wp_get_attachment image( ‘4995’ ); ?>

Permalänkar till bilder av olika storlekar

WordPress kommer också att skapa bilder med hjälp av de filstorleksinställningar som har konfigurerats för din webbplats. Du gör detta genom att gå till Inställningar > Media.

Mediainställningar
Mediainställningar

Så om din bild redan är större än den stora inställningen kommer den att skapa tre bilder – stor, medium och miniatyr.

Det kallar dem inte så, eftersom du kan komma att ändra inställningen för dem i framtiden. Istället används måtten på filen i filnamnet och sparar dem på samma plats som den ursprungliga bilden, i månadsmappen i wp-content/uploads.

Det enklaste sättet att hitta länkarna är att titta på din FTP-klient och hitta alla bilder som laddades upp under en viss månad.

Uppladdade bilder i FTP-klienten
Uppladdade bilder i FTP-klienten

Låt oss ta bilden jag har laddat upp till min webbplats som heter funnycat.jpg. Du kan se den i skärmdumpen ovan.

WordPress har också skapat extra filer med hjälp av filstorleksinställningarna för min webbplats:

  • funnycat-150×150.jpg
  • funnycat-222×300.jpg
  • funnycat-300×200.jpg
  • funnycat-757×1024.jpg
  • funnycat-768×1040.jpg
  • funnycat-1135×1536.jpg
  • funnycat-1513×2048.jpg

Det finns mer än standardstorlekarna eftersom jag använder plugins som använder extra bildstorlekar och har ställt in en extra anpassad storlek för en av mina sidmallar i temat. Men du kan använda länken till alla dessa som en hård länk om du ville göra det.

Men ett bättre alternativ om du ville länka till bilden skulle vara att använda wp_get_attachment_image()-funktionen som vi redan har tittat på, och lägga till en extra parameter för bildstorleken.

Så för att mata ut den medelstora bilden skulle du använda den här:

<?php echo wp_get_attachment image( ‘4995’, ‘medium’ ); ?>

Det är ett mycket mer robust sätt att hämta bilden än att skapa en hård länk i din kod.

Så här omdirigerar du permalänkar för olika innehållstyper

Om du redigerar en slug för ett befintligt inlägg eller ändrar inställningarna för permalänkar i överlag kan det orsaka problem om du tidigare har delat inlägg med de gamla länkarna. Om någon sedan klickar på dessa länkar, kommer de att tas till en 404-sida.

Du kan åtgärda detta genom att skapa omdirigeringar från de gamla länkarna till de nya.

Omdirigera enskilda inlägg och sidor

För att omdirigera den gamla sluggen från ett inlägg till den nya måste du ställa in en omdirigeringsregel för dessa två webbadresser.

Om du är kund hos Kinsta kan du skapa omdirigeringsregler i MyKinsta-panelen.

Hitta din webbplats och klicka sedan på alternativet Omdirigeringar i menyn.

Omdirigeringar i MyKinsta
Omdirigeringar i MyKinsta

Klicka på knappen Lägg till omdirigeringsregel för att öppna popup-fönstret för omdirigeringsregler.

MyKinsta Lägg till omdirigeringsregel
MyKinsta Lägg till omdirigeringsregel

För att lägga till din omdirigering, välj 301-omdirigering, skriv sedan in den gamla sluggen som Omdirigering från-värde och den nya sluggen som Omdirigering till-värde.

Klicka på knappen Lägg till omdirigeringsregel och din omdirigering kommer att ställas in.

Om du inte är kund hos Kinsta kan du använda ett omdirigeringsplugin för att ställa in omdirigeringar. Pluginet Redirection är det mest populära. Det låter dig ställa in omdirigeringar manuellt och det kommer också att övervaka ändringar i dina slugs och automatiskt ställa in omdirigeringar åt dig. Var försiktig så att du undviker omdirigeringsslingor, eftersom det resulterar i felet ”för många omdirigeringar”, vilket förhindrar sidor från att ladda.

Nedan kan du se att jag har ändrat sluggen för ett av mina inlägg och pluginet har fångat upp det och ställt in en omdirigeringsregel.

Skapa omdirigeringsregler i pluginet Redirection
Skapa omdirigeringsregler i pluginet Redirection

Omdirigera arkivsidor

Om du ändrar strukturen på dina arkivsidor med Valfritt-avsnittet på permalänksinställningssidan kommer alla som använder en gammal länk till ett kategoriarkiv att istället tas till din 404-sida. Så du måste ställa in en wildcard-omdirigering.

I MyKinsta kan du skapa en omdirigeringsregel som använder basstrukturen du använde tidigare och den du använder nu, och använd en asterisk för att beteckna den som wildcard.

I fältet Omdirigera från skriver du in den gamla sökvägen till kategorierna, med denna asterisk. Den måste ha formen /oldslug/(.*)$. Posten för Omdirigering till måste ha formen /newslug/$1.

Så om du har ändrat din struktur för kategori-adresser till att använda blogg innan kategorinamnet i stället för standardalternativet kategori, skulle du ange /kategori/(.*)$ i fältet Omdirigeringen från och /Blogg/$1 i fältet Omdirigering till.

Lägg till en wildcard-omdirigering i MyKinsta
Lägg till en wildcard-omdirigering i MyKinsta

Om du använder pluginet Redirection, måste du aktivera Regex-funktioner först, eftersom asterisken som wildcard-markering är en regex-funktion.

Gå till Verktyg > Omdirigering och gå till sektionen Lägg till ny omdirigering på skärmen.

Skapa en ny omdirigeringsregel med omdirigeringsplugin
Skapa en ny omdirigeringsregel med omdirigeringsplugin

Klicka på rullgardinsmenyn URL-alternativ/Regex och markera Regex-rutan.

Ställa in wildcard-omdirigerar med pluginet Redirection
Ställa in wildcard-omdirigerar med pluginet Redirection

Skriv den gamla sökvägen till kategorier i fältet Källadress med en asterisk som wildcardmarkering. Den måste ha formen /oldslug/(.*)$. Posten för Måladress måste ha formen /newslug/$1. Detta fungerar på exakt samma sätt som i MyKinsta.

Kolla in vår videoguide om bästa praxis för omdirigeringar i WordPress:

Felsökning av WordPress-permalänkar

Ibland kanske du upptäcker att permalänkar inte fungerar som du förväntar dig att de ska. Så här gör vi om det händer.

Permalänkar fungerar inte efter att ha registrerat en inläggstyp.

Ibland registrerar du en ny inläggstyp, eller taxonomi och länkarna till de relevanta arkivsidorna eller till inlägg av den inläggstypen fungerar inte.

Ingen panik! Detta beror helt enkelt på att WordPress inte vet att den anpassade inläggstypen eller taxonomin innebär en förändring till permalänksinställningar. Gå helt enkelt till Inställningar > Permalänkar för att uppdatera inställningarna. Du behöver inte ens göra några ändringar eller klicka på knappen Spara ändringar – bara att öppna skärmen kommer att vara tillräckligt.

Permalänkar beter sig inte som du vill

Om dina permalänkar inte fungerar som du förväntar dig och det inte är för att du nyss registrerat en anpassad inläggstyp eller taxonomi, prova dessa tips.

  • Kontrollera att du har skrivit in webbadressen korrekt i webbläsaren.
  • Gå till Inställningar > Permalänkar och kontrollera inställningarna. Stämmer taggarna? Se till att du inte har missat något eller använt fel syntax.
  • Rensa webbplatsens cacheminne om du använder ett cachningsplugin. Cachning kan skapa problem för förändringar i länkar.
  • Om du har ändrat permalänksinställningar kan du ha länkar på din webbplats som nu är inaktuella. Redigera dem eller konfigurera omdirigeringar.
  • Kolla om du manuellt har ändrat sluggen för några inlägg och om dessa behöver redigeras.
  • Kolla om du har ett omdirigeringsplugin installerat eller ett plugin som innehåller omdirigeringar. Om så är fallet, kontrollera vilka omdirigeringar du har lagt till i inställningarna.
  • Om du har några plugins som påverkar inläggstyper eller länkar, prova att inaktivera dem och se om det fixar problemet.
  • Om du inte kan komma åt skärmen för permalänksinställningar använder du den metod som vi beskrivit tidigare för att redigera permalänkar via phpMyAdmin.

Följ dessa tips så bör du kunna få dina permalänkar att fungera som de ska.

Sammanfattning

Permalänkar är en otroligt användbar funktion i WordPress. Du kan använda dem för att förbättra användarupplevelsen och öka din sökmotorranking.

Om du följer guiden ovan får du optimerade permalänkar. Du kommer att kunna konfigurera dem till att fungera exakt som du behöver, för alla inläggstyper, taxonomier och anpassade sluggar.

Nu är det din tur: hur hanterar du dina permalänkar? Har vi glömt att gå igenom något om WordPress-permalänkar? Låt oss veta i kommentarerna nedan!

Rachel McCollin

Rachel McCollin has been helping people build websites with WordPress since 2010. She's a huge fan of self-hosted WordPress and wants to help as many people as possible create an awesome website with it.