{"id":37272,"date":"2020-09-10T23:44:53","date_gmt":"2020-09-11T06:44:53","guid":{"rendered":"https:\/\/kinsta.com\/?p=72202"},"modified":"2023-09-21T09:23:04","modified_gmt":"2023-09-21T09:23:04","slug":"wordpresskrokar","status":"publish","type":"post","link":"https:\/\/kinsta.com\/se\/blog\/wordpresskrokar\/","title":{"rendered":"Bootcamp f\u00f6r WordPresskrokar: S\u00e5 anv\u00e4nder du \u00e5tg\u00e4rds-, filter- och anpassade krokar"},"content":{"rendered":"<p>WordPresskrokar \u00e4r ett av de viktigaste verktygen att ha i en <a href=\"https:\/\/kinsta.com\/blog\/hire-wordpress-developer\/\" target=\"_blank\" rel=\"noopener noreferrer\">WordPress-utvecklares arsenal<\/a>. De \u00e4r grunden f\u00f6r plugin- och temautveckling inom WordPress. Du kan anv\u00e4nda WordPress m\u00e5nga inbyggda krokar f\u00f6r att &#8221;kroka p\u00e5&#8221; WordPressk\u00e4rnan med din anpassade kod f\u00f6r att <strong>g\u00f6ra<\/strong> eller <strong>\u00e4ndra<\/strong> n\u00e5got.<\/p>\n<p>Det finns tv\u00e5 typer av WordPresskrokar: <strong>Action<\/strong> (\u00e5tg\u00e4rder) och <strong>Filter<\/strong>. Krokar \u00e4r s\u00e5 vanliga att WordPressk\u00e4rnan ocks\u00e5 anv\u00e4nder dem i stor utstr\u00e4ckning. WordPress inneh\u00e5ller ocks\u00e5 ett s\u00e4tt f\u00f6r dig att definiera dina egna <strong>anpassade krokar<\/strong> s\u00e5 att andra utvecklare kan kroka p\u00e5 din kod.<\/p>\n<p>Att l\u00e4ra sig hur \u00e5tg\u00e4rds-, filter- och anpassade krokar fungerar \u00e4r viktigt f\u00f6r att beh\u00e4rska WordPress-utveckling.<\/p>\n<p>Den f\u00f6rsta halvan av denna artikel t\u00e4cker grunderna om WordPresskrokar och f\u00f6rklarar hur de fungerar med flera exempel. Under andra halvan l\u00e4r du dig hur du kan anv\u00e4nda krokar f\u00f6r att anpassa WordPress, skapa egna krokar och anv\u00e4nda dem f\u00f6r att bygga dina egna f\u00f6rl\u00e4ngningsbara plugins.<\/p>\n<p>L\u00e5ter det sp\u00e4nnande? Nu b\u00f6rjar vi!<\/p>\n<div><\/div><kinsta-auto-toc heading=\"Table of Contents\" exclude=\"last\" list-style=\"arrow\" selector=\"h2\" count-number=\"-1\"><\/kinsta-auto-toc>\n<h2>Vad \u00e4r WordPresskrokar?<\/h2>\n<p>En <a href=\"https:\/\/kinsta.com\/se\/blog\/duplicerar-sida-inlagg-wordpress\/\" target=\"_blank\" rel=\"noopener noreferrer\">WordPress-sida<\/a> s\u00e4tts samman av massor av funktioner och databasf\u00f6rfr\u00e5gningar. WordPressk\u00e4rnan, plugins och teman samarbetar f\u00f6r att mata ut sidelement som text, <a href=\"https:\/\/kinsta.com\/se\/blog\/jpg-vs-jpeg\/\" target=\"_blank\" rel=\"noopener noreferrer\">bilder<\/a>, skript och stilar. N\u00e4r allt \u00e4r klart s\u00e4tter webbl\u00e4saren ihop dem och renderar sidan.<\/p>\n<p>WordPresskrokar l\u00e5ter dig &#8221;kroka p\u00e5&#8221; denna byggprocess vid vissa punkter och k\u00f6ra din egen kod. Huvudfunktionen hos krokar \u00e4r att du kan \u00e4ndra eller l\u00e4gga till funktioner till WordPress utan att r\u00f6ra <a href=\"https:\/\/kinsta.com\/docs\/support\/scope-of-support\/managed-wordpress-scope-of-support\/#what-is-wordpress-core\" target=\"_blank\" rel=\"noopener noreferrer\">k\u00e4rnfilerna<\/a>.<\/p>\n<figure style=\"width: 1100px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/se\/wp-content\/uploads\/sites\/9\/2020\/09\/utoka-wordpress-med-din-egen-kod.png\" alt=\"Krokar hj\u00e4lper dig att ut\u00f6ka WordPress med din egen kod\" width=\"1100\" height=\"502\"><figcaption class=\"wp-caption-text\">Krokar hj\u00e4lper dig att ut\u00f6ka WordPress med din egen kod<\/figcaption><\/figure>\n<p><a href=\"https:\/\/codex.wordpress.org\/Plugin_API\/\" target=\"_blank\" rel=\"noopener noreferrer\">WordPress Plugin API<\/a> driver funktionaliteten hos WordPresskrokarna. Du anv\u00e4nder krokar genom att anropa vissa WordPressfunktioner som kallas <strong>Krokfunktioner<\/strong> vid specifika instanser d\u00e5 WordPress k\u00f6rs.<\/p>\n<p>Med hj\u00e4lp av krokfunktioner kan du bunta din anpassade kod inom en <strong>Callback-funktion<\/strong> och registrera den med vilken krok som helst. N\u00e4r den \u00e4r registrerad kommer denna callback att k\u00f6ras varhelst kroken \u00e4r, s\u00e5 att du kan ut\u00f6ka eller ers\u00e4tta de vanliga WordPress-funktionerna.<\/p>\n<p>Krokens position i kodk\u00f6rningsprocessen \u00e4r en viktig faktor. Du l\u00e4r dig mer om dess betydelse i de kommande avsnitten.<\/p>\n\n<h3>Tv\u00e5 typer av WordPresskrokar: \u00e5tg\u00e4rder\/actions och filter<\/h3>\n<p>WordPress inneh\u00e5ller tv\u00e5 typer av krokar som kallas <strong>Actions<\/strong> (\u00e5tg\u00e4rder) och <strong>Filter<\/strong>. \u00c5tg\u00e4rder l\u00e5ter dig <strong>g\u00f6ra<\/strong> n\u00e5got p\u00e5 vissa f\u00f6rdefinierade punkter d\u00e5 WordPress k\u00f6r, medan filter l\u00e5ter dig <strong>\u00e4ndra<\/strong> data som behandlas av WordPress och <code>return<\/code> dem.<\/p>\n<p>\u00c5tg\u00e4rder\/actions definieras i WordPress-koden som:<\/p>\n<pre><code class=\"language-php\">do_action( 'action_name', [optional_arguments] );<\/code><\/pre>\n<p><strong><code>Action_name<\/code><\/strong>-str\u00e4ngen \u00e4r namnet p\u00e5 \u00e5tg\u00e4rden. Du kan ange variabeln <strong><code>[optional_arguments]<\/code><\/strong> f\u00f6r att skicka ytterligare argument till callback-funktionen. Om det h\u00e4r f\u00e4ltet inte anges kommer standardv\u00e4rdet att vara tomt.<\/p>\n<p><strong>Exempel:<\/strong> \u00e5tg\u00e4rden <strong><code>do_action ('wp_head')<\/code><\/strong> kan krokas p\u00e5 f\u00f6r att k\u00f6ra anpassad kod varje g\u00e5ng WordPress behandlar <a href=\"https:\/\/kinsta.com\/blog\/add-code-wordpress-header-footer\/\" target=\"_blank\" rel=\"noopener noreferrer\">webbplatsens header<\/a>. Denna \u00e5tg\u00e4rd har inga andra argument.<\/p>\n<p>Filter definieras i WordPress-koden som:<\/p>\n<pre><code class=\"language-php\">apply_filters( 'filter_name', 'value_to_be_filtered', [optional_arguments] );<\/code><\/pre>\n<p>Str\u00e4ngen <strong><code>filter_name<\/code><\/strong> \u00e4r namnet p\u00e5 filtret, <strong><code>value_to_be_filtered<\/code>&#8211;<\/strong>variabeln \u00e4r det v\u00e4rde som m\u00e5ste filtreras och returneras, och variabeln <strong><code>[optional_arguments]<\/code><\/strong> kan skicka ytterligare argument, precis som med \u00e5tg\u00e4rder.<\/p>\n<p><strong>Exempel:<\/strong> filtret <strong><code>apply_filters ('admin_footer_text', string $text )<\/code><\/strong> kan krokas p\u00e5 f\u00f6r att \u00e4ndra texten som visas i admin-headern. Fr\u00e5n och med WordPress 5.4 kommer dess standardv\u00e4rde att visa meningen <em>Tack f\u00f6r att du skapar med<\/em> <a href=\"https:\/\/wordpress.org\/\" target=\"_blank\" rel=\"noopener noreferrer\"><em>WordPress<\/em><\/a><em>.<\/em> i adminomr\u00e5dets footer.<\/p>\n<p>Du l\u00e4r dig att kroka p\u00e5 \u00e5tg\u00e4rder och filter senare med m\u00e5nga exempel fr\u00e5n WordPressk\u00e4rnan.<\/p>\n<p>N\u00e4r allt \u00e4r p\u00e5krokat kan du styra din kod f\u00f6r att <strong>g\u00f6ra<\/strong> eller <strong>anpassa<\/strong> n\u00e5got p\u00e5 din webbplats. Du kan till exempel anv\u00e4nda krokar f\u00f6r att skicka ett <a href=\"https:\/\/kinsta.com\/se\/blog\/e-postmarknadsforingens-basta-praxis\/#email-marketing-platform\" target=\"_blank\" rel=\"noopener noreferrer\">automatiserat e-postmeddelande<\/a> efter att ha publicerat ett inl\u00e4gg, eller ladda <a href=\"https:\/\/kinsta.com\/se\/blog\/wordpress-barntema\/#the-files-in-a-wordpress-child-theme\" target=\"_blank\" rel=\"noopener noreferrer\">anpassade stilmallar<\/a> f\u00f6r att \u00e4ndra utseendet p\u00e5 din webbplats.<\/p>\n<figure style=\"width: 1100px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/se\/wp-content\/uploads\/sites\/9\/2020\/09\/interagera-med-eller-andra-din-webbplats.png\" alt=\"WordPresskrokar hj\u00e4lper dig att interagera med eller \u00e4ndra din webbplats\" width=\"1100\" height=\"600\"><figcaption class=\"wp-caption-text\">WordPresskrokar hj\u00e4lper dig att interagera med eller \u00e4ndra din webbplats<\/figcaption><\/figure>\n<p>Det enklaste s\u00e4ttet att f\u00f6rst\u00e5 krokar \u00e4r att f\u00f6rest\u00e4lla dig din <a href=\"https:\/\/kinsta.com\/blog\/wordpress-site-examples\/\" target=\"_blank\" rel=\"noopener noreferrer\">WordPresswebbplats<\/a> som att bygga ett hus.<\/p>\n<p>Krokar \u00e4r som att anv\u00e4nda en kran f\u00f6r att flytta byggmaterial fram och tillbaka. Objekten som flyttas \u00e4r <strong>Callback-funktioner<\/strong> som inneh\u00e5ller din <a href=\"https:\/\/kinsta.com\/blog\/edit-wordpress-code\/\" target=\"_blank\" rel=\"noopener noreferrer\">anpassade kod<\/a>. Dessa objekt (eller funktioner) kan hj\u00e4lpa dig att bygga eller \u00e4ndra huset.<\/p>\n<figure style=\"width: 1100px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/se\/wp-content\/uploads\/sites\/9\/2020\/09\/wp_head22-atgarden.png\" alt=\"Exempel p\u00e5 att kroka p\u00e5 \"wp_head\"-\u00e5tg\u00e4rden i WordPress\" width=\"1100\" height=\"636\"><figcaption class=\"wp-caption-text\">Exempel p\u00e5 att kroka p\u00e5 &#8221;wp_head&#8221;-\u00e5tg\u00e4rden i WordPress<\/figcaption><\/figure>\n<p>Callback-funktioner kan vara vanliga PHP-funktioner, WordPress standardfunktioner eller anpassade funktioner som definieras av dig.<\/p>\n<p>Vi kan bara b\u00e4ra vissa objekt p\u00e5 specifika b\u00e4rare kopplade till s\u00e4rskilda krokar. \u00c5tg\u00e4rder kan d\u00e4rf\u00f6r endast krokas p\u00e5 <strong>\u00c5tg\u00e4rdsfunktioner<\/strong>.\u00a0P\u00e5 samma s\u00e4tt kan Filter endast krokas p\u00e5 <strong>Filterfunktioner<\/strong>.<\/p>\n<p>\u00c4ven om det \u00e4r tr\u00e5kigt att byta krokar och b\u00e4rare p\u00e5 en kran, g\u00f6r WordPress det superenkelt genom att inkludera <a href=\"https:\/\/adambrown.info\/p\/wp_hooks\" target=\"_blank\" rel=\"noopener noreferrer\">\u00f6ver 2 200 typer av standardkrokar<\/a>.<\/p>\n<figure style=\"width: 900px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/se\/wp-content\/uploads\/sites\/9\/2020\/09\/wordpress-inbyggda-krokar.png\" alt=\"WordPress 5.1 har 2200+ inbyggda krokar\" width=\"900\" height=\"357\"><figcaption class=\"wp-caption-text\">WordPress 5.1 har 2200+ inbyggda krokar (k\u00e4lla: Adam Brown)<\/figcaption><\/figure>\n<p>Du kan hitta krokar utspridda \u00f6ver hela WordPressk\u00e4rnan, s\u00e5 att du kan utnyttja den exakta position d\u00e4r du vill kroka p\u00e5 och k\u00f6ra din anpassade kod.<\/p>\n\n<h2>Krokar vs \u00e5tg\u00e4rder vs filter<\/h2>\n<p>Enligt <a href=\"https:\/\/developer.wordpress.org\/plugins\/hooks\/\" target=\"_blank\" rel=\"noopener noreferrer\">WordPress Pluginhandbok<\/a>:<\/p>\n<blockquote><p>&#8221;<em>Krokar \u00e4r ett s\u00e4tt f\u00f6r en bit kod att interagera\/\u00e4ndra en annan bit kod&#8230; det finns tv\u00e5 typer av krokar: \u00c5tg\u00e4rder och Filter.<\/em>&#8221;<\/p><\/blockquote>\n<p>Det finns utbredd inkonsekvens f\u00f6r hur termerna <strong>Krok<\/strong>, <strong>\u00c5tg\u00e4rd<\/strong> och <strong>Filter<\/strong> anv\u00e4nds. N\u00e5gra handledningar och guider blandar ihop dem med de funktioner som \u00e4r f\u00f6rknippade med dem. En viktig orsak till denna f\u00f6rvirring \u00e4r den komplexa karakt\u00e4ren av hur krokar fungerar.<\/p>\n<p>\u00c4ven n\u00e4r du tittar noggrant i WordPressk\u00e4rnan finner du att det inte finns s\u00e5 stor skillnad mellan att l\u00e4gga till \u00e5tg\u00e4rder och filter. H\u00e4r \u00e4r <a href=\"https:\/\/core.trac.wordpress.org\/browser\/tags\/5.4\/src\/wp-includes\/plugin.php#L403\" target=\"_blank\" rel=\"noopener noreferrer\">k\u00e4llkoden f\u00f6r add_action()-funktionen<\/a> fr\u00e5n <strong><code>wp-includes\/plugin.php<\/code><\/strong>-filen:<\/p>\n<p><span style=\"font-size: 1rem\">:<\/span><\/p>\n<pre><code class=\"language-php\">function add_action( $tag, $function_to_add, $priority = 10, $accepted_args = 1 ) {\u00a0 \u00a0 \u00a0 \n    return add_filter( $tag, $function_to_add, $priority, $accepted_args );\n}<\/code><\/pre>\n<p><strong><code>Add_action()<\/code><\/strong>-funktionen anropar bara <strong><code>add_filter()<\/code><\/strong>-funktionen och returnerar dess v\u00e4rde. Varf\u00f6r? Eftersom de b\u00e5da i grunden fungerar likadant, f\u00f6rutom en skillnad.<\/p>\n<p>Funktionen <strong><code>apply_filters()<\/code><\/strong> returnerar ett v\u00e4rde som kan \u00e4ndra befintliga datatyper, medan funktionen <strong><code>do_action()<\/code><\/strong> returnerar ingenting (<a href=\"https:\/\/www.php.net\/manual\/en\/functions.returning-values.php\" target=\"_blank\" rel=\"noopener noreferrer\">NULL-v\u00e4rde i PHP<\/a>).<\/p>\n<p>Om du fortfarande \u00e4r f\u00f6rvirrad, oroa dig inte! N\u00e4r du kommit igenom den f\u00f6rsta halvan av den h\u00e4r artikeln kommer allt att vara klart och tydligt. Vi h\u00e5ller oss till den officiella WordPress Codex-terminologin eftersom den \u00e4r tydlig, exakt och universell.<\/p>\n<p>Nu kan du bekanta dig med Krokrutinen enligt hur vi visar den nedan.<\/p>\n<figure style=\"width: 1100px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/se\/wp-content\/uploads\/sites\/9\/2020\/09\/krokrutinen.png\" alt=\"Krokrutinen: Krokar, Krokfunktioner och Callbackfunktioner\" width=\"1100\" height=\"1161\"><figcaption class=\"wp-caption-text\">Krokrutinen: Krokar, Krokfunktioner och Callbackfunktioner<\/figcaption><\/figure>\n<p>L\u00e5t oss g\u00e5 igenom skillnaderna mellan \u00e5tg\u00e4rder och krokar.<\/p>\n<table>\n<tbody>\n<tr>\n<td style=\"text-align: center\" colspan=\"2\"><strong>WordPress-krokar<\/strong><\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: center\"><strong>\u00c5tg\u00e4rder<\/strong><\/td>\n<td style=\"text-align: center\"><strong>Filters<\/strong><\/td>\n<\/tr>\n<tr>\n<td>\u00c5tg\u00e4rder anv\u00e4nds f\u00f6r att k\u00f6ra anpassade funktioner vid en viss punkt under exekveringen av WordPressk\u00e4rnan.<\/td>\n<td>Filter anv\u00e4nds f\u00f6r att \u00e4ndra eller anpassa data som anv\u00e4nds av andra funktioner.<\/td>\n<\/tr>\n<tr>\n<td>\u00c5tg\u00e4rder definieras\/skapas av funktionen <code><strong>do_action ('action_name')<\/strong><\/code> i WordPress-koden.<\/td>\n<td>Filter definieras\/skapas av funktionen <code><strong>apply_filters ('filter_name', 'value_to_be_filtered')<\/strong><\/code> i WordPress-koden.<\/td>\n<\/tr>\n<tr>\n<td>\u00c5tg\u00e4rder kallas ocks\u00e5 <strong>\u00c5tg\u00e4rdskrokar<\/strong>.<\/td>\n<td>Filter kallas ocks\u00e5 <strong>Filterkrokar<\/strong>.<\/td>\n<\/tr>\n<tr>\n<td>\u00c5tg\u00e4rder kan endast krokas p\u00e5 \u00c5tg\u00e4rdsfunktioner. T.ex. <strong>add_action()<\/strong>, <strong><code>remove_action()<\/code><\/strong>.<\/td>\n<td>Filter kan endast krokas p\u00e5 filterfunktioner. T. ex. <code><strong>add_filter()<\/strong><\/code>, <code><strong>remove_filter()<\/strong><\/code>.<\/td>\n<\/tr>\n<tr>\n<td>\u00c5tg\u00e4rdsfunktioner beh\u00f6ver inte skicka n\u00e5gra argument till sina callbackfunktioner.<\/td>\n<td>Filterfunktioner m\u00e5ste skicka minst ett argument till sina callbackfunktioner.<\/td>\n<\/tr>\n<tr>\n<td>\u00c5tg\u00e4rdsfunktioner kan utf\u00f6ra alla m\u00f6jliga uppgifter, inklusive att \u00e4ndra hur WordPress fungerar.<\/td>\n<td>Filterfunktioner finns bara f\u00f6r att \u00e4ndra de data som \u00f6verf\u00f6rs till dem av filtren.<\/td>\n<\/tr>\n<tr>\n<td>\u00c5tg\u00e4rdsfunktioner b\u00f6r inte <strong><code>return<\/code><\/strong>n\u00e5gonting. De kan dock <strong><code>echo<\/code><\/strong>resultatet eller interagera med databasen.<\/td>\n<td>Filter functions must <code><strong>return<\/strong><\/code> their changes as output. Even if a filter function changes nothing, it must still <code><strong>return<\/strong><\/code> the unmodified input.<\/td>\n<\/tr>\n<tr>\n<td>\u00c5tg\u00e4rder kan exekvera n\u00e4stan vad som helst, s\u00e5 l\u00e4nge koden \u00e4r giltig.<\/td>\n<td>Filter b\u00f6r fungera p\u00e5 ett isolerat s\u00e4tt, s\u00e5 att de inte f\u00e5r n\u00e5gra oavsiktliga biverkningar.<\/td>\n<\/tr>\n<tr>\n<td><strong>Sammanfattning:<\/strong> en \u00e5tg\u00e4rd avbryter den vanliga kodexekveringsprocessen f\u00f6r att g\u00f6ra n\u00e5got med den information den tar emot, men returnerar ingenting tillbaka.<\/td>\n<td><strong>Sammanfattning:<\/strong> ett filter \u00e4ndrar informationen den tar emot, returnerar den tillbaka till den anropande krok-funktionen och andra funktioner kan anv\u00e4nda det v\u00e4rde den returnerar.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\u00a0<\/p>\n<p>Ibland kan du anv\u00e4nda antingen en \u00e5tg\u00e4rd eller ett filter f\u00f6r att uppn\u00e5 samma m\u00e5l. Om du till exempel vill \u00e4ndra texten i ett inl\u00e4gg kan du registrera en callback-funktion med <a href=\"https:\/\/codex.wordpress.org\/Plugin_API\/Action_Reference\/publish_post\" target=\"_blank\" rel=\"noopener noreferrer\">publish_post<\/a>-\u00e5tg\u00e4rden och \u00e4ndra inl\u00e4ggsinneh\u00e5llet n\u00e4r det sparas i <a href=\"https:\/\/kinsta.com\/se\/blog\/wordpressdatabasen\/\" target=\"_blank\" rel=\"noopener noreferrer\">databasen<\/a>.<\/p>\n<pre><code class=\"language-php\">\/\/ define the callback function to change the text\nfunction change_text_callback() { \n    \/\/ add the code to change text here\n}\n\n\/\/ hook in to the 'publish_post' action with the add_action() function\nadd_action( 'publish_post', 'change_text_callback' );<\/code><\/pre>\n<p>Eller s\u00e5 kan du registrera en annan callback-funktion med <a href=\"https:\/\/developer.wordpress.org\/reference\/hooks\/the_content\/\" target=\"_blank\" rel=\"noopener noreferrer\">the_content<\/a>-filtret f\u00f6r att \u00e4ndra inl\u00e4ggsinneh\u00e5llet innan det visas i webbl\u00e4saren.<\/p>\n<pre><code class=\"language-php\">\/\/ define the callback function to modify the text\nfunction change_text_another_callback( $content ) { \n    \/\/ add the code to change text here and then return it \n    return $filtered_content;\n}\n\n\/\/ hook in to 'the_content' filter with the add_filter() function\nadd_filter( 'the_content', 'change_text_another_callback');<\/code><\/pre>\n<p>Tv\u00e5 olika tillv\u00e4gag\u00e5ngss\u00e4tt med samma resultat. Att veta n\u00e4r man ska anv\u00e4nda den ena eller den andra \u00e4r nyckeln till att vara en <a href=\"https:\/\/kinsta.com\/se\/blog\/wordpress-utvecklarloner\/\" target=\"_blank\" rel=\"noopener noreferrer\">bra WordPressutvecklare<\/a>.<\/p>\n<h2>Hur fungerar WordPresskrokar?<\/h2>\n<p>Husexemplet var enkelt nog f\u00f6r att f\u00f6rst\u00e5 krokarnas grundl\u00e4ggande funktion, men det beskriver inte komplexiteten i hur de fungerar. Och s\u00e4rskilt inte begreppen krok-position och specificitet.<\/p>\n<p>Ett b\u00e4ttre exempel skulle vara att f\u00f6rest\u00e4lla sig bearbetningen av en WordPresswebbsida som monteringen av en bil. Till skillnad fr\u00e5n tillverkning av en bil, som tar tid, \u00e4r montering av en webbsida n\u00e4stan \u00f6gonblicklig.<\/p>\n<figure style=\"width: 1100px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/se\/wp-content\/uploads\/sites\/9\/2020\/09\/att-montera-en-webbsida.png\" alt=\"Att montera en webbsida \u00e4r som att montera en bil\" width=\"1100\" height=\"1223\"><figcaption class=\"wp-caption-text\">Att montera en webbsida \u00e4r som att montera en bil<\/figcaption><\/figure>\n<p>Ungef\u00e4r som hur en bil s\u00e4tts ihop del f\u00f6r del i en modern monteringslinje, monteras en WordPresswebbsida element f\u00f6r element av servern och klienten.<\/p>\n<p>WordPressk\u00e4rnan \u00e4r som bilmotorn, chassit och andra v\u00e4sentligheter, som driver webbplatsens grundl\u00e4ggande funktionalitet.<\/p>\n<p>Du kan ha en funktionell hemsida med bara WordPressk\u00e4rnan, men hur kul \u00e4r det? Du m\u00e5ste l\u00e4gga till sp\u00e4nnande funktioner p\u00e5 webbplatsen. Det \u00e4r d\u00e4r <a href=\"https:\/\/kinsta.com\/se\/topics\/wordpress-plugins\/\" target=\"_blank\" rel=\"noopener noreferrer\">WordPress-plugins<\/a> och <a href=\"https:\/\/kinsta.com\/se\/blog\/snabbaste-wordpress-theme\/\" target=\"_blank\" rel=\"noopener noreferrer\">teman<\/a> kommer in, som b\u00e5da anv\u00e4nder krokar i stor utstr\u00e4ckning.<\/p>\n<p>I exemplet ovan \u00e4r varje numrerad station som en krok inuti WordPressk\u00e4rnan. Det finns tv\u00e5 typer av stationer, precis som \u00e5tg\u00e4rder och filter. Varje station inneh\u00e5ller en specifik typ av plats som endast accepterar vissa verktyg, liknande \u00e5tg\u00e4rdsfunktioner och filterfunktioner.<\/p>\n<p>Alla stationer \u00e4r placerade med t\u00e4ta intervall f\u00f6r modularitet och effektivitet.<\/p>\n<p>Beroende p\u00e5 en viss positions krav kan vi f\u00e4sta (eller kroka p\u00e5 det l\u00e4mpligaste verktyget f\u00f6r den specifika stationens jobb. Dessa verktyg \u00e4r som callback-funktionerna som vi anv\u00e4nde f\u00f6r att interagera med eller \u00e4ndra WordPress.<\/p>\n<p>Vissa verktyg kan v\u00e4sentligt f\u00f6r\u00e4ndra bilens funktion, ungef\u00e4r som callbacks till \u00e5tg\u00e4rder. Andra verktyg anv\u00e4nds endast f\u00f6r att anpassa utseendet p\u00e5 bilen, som callbacks till filter.<\/p>\n<p>Att anv\u00e4nda r\u00e4tt verktyg p\u00e5 r\u00e4tt stationer \u00e4r avg\u00f6rande f\u00f6r att bygga en f\u00f6rstklassig bil. P\u00e5 samma s\u00e4tt hj\u00e4lper krokar oss att anpassa WordPress enligt v\u00e5ra unika behov.<\/p>\n<p>Om du ut\u00f6kar denna analogi \u00e4r plugins som att l\u00e4gga till anv\u00e4ndbara bilfunktioner som krockkuddar, underh\u00e5llningskonsoller, nyckelfritt fj\u00e4rrsystem, etc. (som dessa f\u00f6r att <a href=\"https:\/\/kinsta.com\/blog\/woocommerce-plugins\/\" target=\"_blank\" rel=\"noopener noreferrer\">f\u00f6rb\u00e4ttra WooCommerce-funktionaliteten<\/a>). Teman \u00e4r analoga med att anpassa den visuella delen av bilen, som den \u00f6vergripande designen, lackering, f\u00e4lgar etc. (det \u00e4r s\u00e5 h\u00e4r du <a href=\"https:\/\/kinsta.com\/se\/blog\/sa-har-anpassar-wordpress-tema\/\" target=\"_blank\" rel=\"noopener noreferrer\">anpassar ditt WordPresstema<\/a>).<\/p>\n<h2>Var ska krokar och deras funktioner registreras?<\/h2>\n<p>Det finns tv\u00e5 rekommenderade s\u00e4tt att l\u00e4gga till krokar i WordPress:<\/p>\n<ul>\n<li><strong>Plugins: <\/strong>G\u00f6r ditt eget plugin och l\u00e4gg till alla din egen kod i det.<\/li>\n<li><strong>Barnteman: <\/strong>Registrera krokarna och callback-funktionerna i ditt <a href=\"https:\/\/kinsta.com\/se\/blog\/wordpress-barntema\/\" target=\"_blank\" rel=\"noopener noreferrer\">barntemas <strong><code>functions.php<\/code><\/strong>-fil<\/a>.<\/li>\n<\/ul>\n<p>Under denna guide ska vi b\u00f6rja med att skapa ett plugin. F\u00f6r att g\u00f6ra det, skapar du f\u00f6rst en ny mapp i din<code> <strong>\/wp-content\/plugins<\/strong><\/code>&#8211; katalog.<\/p>\n<p>Jag d\u00f6per mitt plugin <strong><code>salhooks<\/code><\/strong>, men du kan kalla det vad du vill. Enligt WordPress riktlinjer m\u00e5ste du skapa en PHP-fil med samma namn (<strong><code>salhooks.php<\/code><\/strong>) inuti din pluginkatalog.<\/p>\n<p>L\u00e4gg till f\u00f6ljande header i din plugin-fil f\u00f6r att registrera pluginet med WordPress. Du kan l\u00e4sa mer om <a href=\"https:\/\/developer.wordpress.org\/plugins\/plugin-basics\/header-requirements\/\" target=\"_blank\" rel=\"noopener noreferrer\">pluginets header-krav<\/a> i WordPress Codex.<\/p>\n<pre><code class=\"language-php\">&lt;?php\n\n\/*\nPlugin Name:  Salhooks\nVersion    :  1.0\nDescription:  Demonstrating WordPress Hooks (Actions and Filters) with multiple examples.\nAuthor     :  Salman Ravoof\nAuthor URI :  https:\/\/www.salmanravoof.com\/\nLicense    :  GPLv2 or later\nLicense URI:  https:\/\/www.gnu.org\/licenses\/gpl-2.0.html\nText Domain:  salhooks\n*\/\n\n\/\/=================================================\n\/\/ Security: Abort if this file is called directly\n\/\/=================================================\nif ( !defined('ABSPATH') ) { \n    die;\n}<\/code><\/pre>\n<p>Spara den h\u00e4r filen och aktivera sedan pluginet i din <a href=\"https:\/\/kinsta.com\/se\/blog\/wordpress-admin\/\" target=\"_blank\" rel=\"noopener noreferrer\">WordPresspanel<\/a>. Jag kommer att anv\u00e4nda detta plugin p\u00e5 en <a href=\"https:\/\/kinsta.com\/se\/blog\/installerar-wordpress-lokalt\/\" target=\"_blank\" rel=\"noopener noreferrer\">lokal WordPressinstallation<\/a> f\u00f6r att visa hur krokar fungerar.<\/p>\n<p>Du kan ocks\u00e5 redigera WordPressk\u00e4rnans filer direkt f\u00f6r att registrera krokar. Det rekommenderas dock inte eftersom all din anpassade kod kommer att skrivas \u00f6ver varje g\u00e5ng <a href=\"https:\/\/kinsta.com\/se\/blog\/wordpress-automatiska-uppdateringar\/\" target=\"_blank\" rel=\"noopener noreferrer\">du uppdaterar WordPress<\/a>. Du b\u00f6r inte l\u00e4gga till krokar inuti ditt \u00f6verordnade tema av samma anledning.<\/p>\n<h2>Att anv\u00e4nda WordPresskrokar<\/h2>\n<p>En WordPresskrok i sig g\u00f6r ingenting. Den sitter bara i koden och v\u00e4ntar p\u00e5 en krokfunktion som ska aktivera den. F\u00f6r att anv\u00e4nda en krok m\u00e5ste du anropa minst 2 andra funktioner.<\/p>\n<p>F\u00f6rst m\u00e5ste du registrera kroken med en krokfunktion och referera till en callback-funktion inom den. Och sedan m\u00e5ste du definiera callback-funktionen som du n\u00e4mnde tidigare i krokfunktionen. WordPress kommer att k\u00f6ra denna callback-funktion varje g\u00e5ng kroken avfyras.<\/p>\n<p>Den ordning i vilken du definierar dessa funktioner spelar ingen roll, men det \u00e4r en bra id\u00e9 att l\u00e4gga dem n\u00e4ra varandra.<\/p>\n<p>\u00c5tg\u00e4rder och filter har olika krokfunktioner. Fr\u00e5n och med nu kommer vi kalla dem <strong>\u00c5tg\u00e4rdsfunktioner<\/strong> och <strong>Filterfunktioner<\/strong>. Som du ser har de sina egna syntax-och parameterkrav.<\/p>\n<div><\/div><kinsta-auto-toc list-style=\"disc\" selector=\"h3\" count-number=\"3\" sub-toc=\"true\"><\/kinsta-auto-toc>\n<h3>Kroka p\u00e5 en \u00e5tg\u00e4rd<\/h3>\n<p>\u00c5tg\u00e4rder ger dig ett s\u00e4tt att k\u00f6ra din anpassade kod vid en viss punkt i exekveringen av WordPressk\u00e4rnan, plugins eller teman.<\/p>\n<h4>\u00c5tg\u00e4rdsfunktionen add_action()<\/h4>\n<ol>\n<li>Definiera en <strong><code>callback-funktion<\/code><\/strong> som inneh\u00e5ller din anpassade kod. Denna callback-funktion kommer att k\u00f6ras n\u00e4r en \u00e5tg\u00e4rd som den \u00e4r registrerad till avfyras n\u00e4r WordPresskoden exekveras.<\/li>\n<li>Kroka p\u00e5 din callback-funktion till den \u00e5tg\u00e4rd du vill ha med <strong><code>add_action()<\/code><\/strong>-funktionen. Enligt WordPress Codex m\u00e5ste <a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/add_action\/\" target=\"_blank\" rel=\"noopener noreferrer\">add_action()<\/a>-funktionen passera minst tv\u00e5 parametrar:\n<ul>\n<li>Namnet p\u00e5 \u00e5tg\u00e4rden att krokas p\u00e5.<\/li>\n<li>Namnet p\u00e5 callback-funktionen som k\u00f6rs n\u00e4r \u00e5tg\u00e4rden aktiveras.<\/li>\n<\/ul>\n<\/li>\n<li>Funktionen <strong><code>add_action()<\/code><\/strong> accepterar ocks\u00e5 tv\u00e5 valfria parametrar f\u00f6r att st\u00e4lla in <strong><code>priority<\/code><\/strong>, och <strong><code>number of arguments<\/code><\/strong>. Vi diskuterar b\u00e5da lite senare.<\/li>\n<\/ol>\n<p>Det \u00e4r bra att d\u00f6pa dina callback-funktionsparametrar s\u00e5 likt de parametrar som skickas av krokfunktionen som m\u00f6jligt.<\/p>\n<p>L\u00e5t oss titta p\u00e5 ett exempel p\u00e5 att anv\u00e4nda <strong><code>add_action()<\/code><\/strong>-funktionen.<\/p>\n<pre><code class=\"language-php\">\/\/ define the callback function, the arguments are optional\nfunction example_callback( $arg1, $arg2 ) {\n\u00a0 \u00a0 \/\/ make your code do something with the arguments\n}\n\n\/\/ hook the callback function to the 'example_action'\nadd_action( 'example_action', 'example_callback', [priority], [no_of_args] );\n\n\/\/ 'priority' and 'number of arguments' are optional parameters<\/code><\/pre>\n<h4>Exempel p\u00e5 att kroka p\u00e5 en \u00e5tg\u00e4rd<\/h4>\n<p>WordPress inneh\u00e5ller en inbyggd \u00e5tg\u00e4rd som heter <a href=\"https:\/\/developer.wordpress.org\/reference\/hooks\/init\/\">init<\/a> som avfyras efter att WordPress har laddats och autentiserat anv\u00e4ndaren, men innan n\u00e5gra headers skickas. M\u00e5nga plugins anv\u00e4nder den h\u00e4r kroken som utg\u00e5ngspunkt f\u00f6r att instansiera sin kod, eftersom n\u00e4stan alla de stora WordPress-funktionerna har laddats klart n\u00e4r WordPress k\u00f6r denna \u00e5tg\u00e4rd.<\/p>\n<p>WordPress har en liknande \u00e5tg\u00e4rd som heter <a href=\"https:\/\/developer.wordpress.org\/reference\/hooks\/admin_init\/\">admin_init<\/a>. Den avfyras medan adminsk\u00e4rmen initieras, medan <strong><code>init<\/code><\/strong>-\u00e5tg\u00e4rden f\u00f6rst avfyras efter att WordPress har laddats klart.<\/p>\n<p>L\u00e5t oss k\u00f6ra en anpassad kod f\u00f6r att <b><code>echo<\/code><\/b> ett enkelt meddelande under exekveringen av <strong><code>init<\/code><\/strong>-\u00e5tg\u00e4rden. S\u00e5 h\u00e4r g\u00f6r du det:<\/p>\n<pre><code class=\"language-php\">function custom_callback_function(){\n\u00a0 \u00a0 \/\/ add your custom code here to do something\n\u00a0 \u00a0 echo 'I will be fired on WordPress initialization';\n}\nadd_action( 'init', 'custom_callback_function' );<\/code><\/pre>\n<p>Du kan se meddelandet ekas i det \u00f6vre v\u00e4nstra h\u00f6rnet av min <a href=\"https:\/\/kinsta.com\/se\/blog\/installerar-wordpress-lokalt\/\" target=\"_blank\" rel=\"noopener noreferrer\">lokala WordPressinstallation<\/a>.<\/p>\n<figure id=\"attachment_72244\" aria-describedby=\"caption-attachment-72244\" style=\"width: 1100px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-72244 size-full\" src=\"https:\/\/kinsta.com\/se\/wp-content\/uploads\/sites\/9\/2020\/09\/en-bra-start.jpg\" alt=\"Inte s\u00e5 snyggt, men det \u00e4r en bra start!\" width=\"1100\" height=\"500\"><figcaption id=\"caption-attachment-72244\" class=\"wp-caption-text\">Inte s\u00e5 snyggt, men det \u00e4r en bra start!<\/figcaption><\/figure>\n<h4>Hitta \u00e5tg\u00e4rder som st\u00f6ds av WordPress<\/h4>\n<p>WordPress inkluderar \u00e5tg\u00e4rder varje g\u00e5ng det g\u00f6r n\u00e5got; som en <a href=\"https:\/\/kinsta.com\/se\/blog\/wordpress-inloggningsadress\/\" target=\"_blank\" rel=\"noopener noreferrer\">anv\u00e4ndare som loggar in<\/a> eller <a href=\"https:\/\/kinsta.com\/se\/blog\/wordpress-felet-missat-schema\/\" target=\"_blank\" rel=\"noopener noreferrer\">publicerar ett nytt inl\u00e4gg<\/a>. Du kan hitta en omfattande lista \u00f6ver alla \u00e5tg\u00e4rder som drivs av WordPress p\u00e5 sidan \u00f6ver <a href=\"https:\/\/codex.wordpress.org\/Plugin_API\/Action_Reference\" target=\"_blank\" rel=\"noopener noreferrer\">Plugin API\/\u00e5tg\u00e4rdsreferenser<\/a>.<\/p>\n<figure id=\"attachment_72247\" aria-describedby=\"caption-attachment-72247\" style=\"width: 1100px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-72247 size-full\" src=\"https:\/\/kinsta.com\/se\/wp-content\/uploads\/sites\/9\/2020\/09\/atgard-for-nastan-vad-som-helst.png\" alt=\"Det finns en \u00e5tg\u00e4rd f\u00f6r n\u00e4stan vad som helst.\" width=\"1100\" height=\"500\"><figcaption id=\"caption-attachment-72247\" class=\"wp-caption-text\">Det finns en \u00e5tg\u00e4rd f\u00f6r n\u00e4stan vad som helst.<\/figcaption><\/figure>\n<p>Codexen har delat upp alla \u00e5tg\u00e4rder i olika kategorier och ordnat dem fr\u00e5n f\u00f6rsta till sista i WordPress exekveringsordning.<\/p>\n<p>I de flesta fall kommer m\u00e5nga av dessa \u00e5tg\u00e4rder inte att g\u00f6ra n\u00e5got eftersom ingenting har krokats p\u00e5 dem. Men om du beh\u00f6ver dem, finns de d\u00e4r.<\/p>\n<p>K\u00e4nner du dig lite \u00f6verv\u00e4ldigad \u00f6ver alla dessa \u00e5tg\u00e4rder? Det vore ganska naturligt. N\u00e4r du f\u00e5r mer erfarenhet och g\u00e5r igenom WordPressk\u00e4rnans k\u00e4llkod blir det l\u00e4ttare att hitta den perfekta kroken som du beh\u00f6ver. Bara g\u00f6r en s\u00f6kning efter termen &#8221;<strong>do_action<\/strong>&#8221; och du hittar massor av \u00e5tg\u00e4rder som du kan kroka p\u00e5.<\/p>\n<h4>Ytterligare parametrar f\u00f6r add_action()<\/h4>\n<p>Funktionen <strong><code>add_action()<\/code><\/strong> kan acceptera ytterligare tv\u00e5 parametrar: en f\u00f6r att st\u00e4lla in <strong><code>priority<\/code><\/strong>\u00a0och den andra f\u00f6r att st\u00e4lla in <strong><code>number of arguments<\/code><\/strong>. Medan de \u00e4r valfria kan de vara riktigt hj\u00e4lpsamma om de anv\u00e4nds korrekt.<\/p>\n<h5>Priority<\/h5>\n<p>Den f\u00f6rsta ytterligare parametern som st\u00f6ds av <strong><code>add_action()<\/code><\/strong>-funktionen st\u00e4ller in <strong><code>priority<\/code><\/strong>. Denna parameter kan bara vara ett positivt heltal. Ju l\u00e4gre prioritetsnummer desto tidigare kommer funktionen att k\u00f6ras. Standardv\u00e4rdet \u00e4r 10 om du inte \u00e4ndrar det.<\/p>\n<p>F\u00f6r att se hur det fungerar, l\u00e5t oss registrera tre callback-funktioner till <strong><code>init<\/code><\/strong>-\u00e5tg\u00e4rden, men var och en med olika prioriteringar.<\/p>\n<pre><code class=\"language-php\">\/\/ priority is set to 9, which is lower than 10, hence it ranks higher\nadd_action( 'init', 'i_am_high_priority', 9 );\n\n\/\/ if no priority is set, the default value of 10 will be used\nadd_action( 'init', 'i_am_default_priority');\n\n\/\/ priority is set to 11, which is higher than 11, hence it ranks lower\nadd_action( 'init', 'i_am_low_priority', 11 );<\/code><\/pre>\n<p>I exemplen ovan k\u00f6rs callback-funktionen med det l\u00e4gsta prioritetsnumret f\u00f6rst och den med det h\u00f6gsta numret sist. Om de har samma prioritering kommer de att k\u00f6ras i den ordning du registrerat dem.<\/p>\n<p>Prioritet spelar en viktig roll eftersom en enda krok kan ha flera registrerade callback-funktioner. F\u00f6r att undvika ov\u00e4ntade resultat kan du st\u00e4lla in en prioritet f\u00f6r varje callback-funktion, s\u00e5 att de avfyras i den ordning du vill att de ska.<\/p>\n<h5>Number of Arguments<\/h5>\n<p>Som standard kommer en callback-funktion som registrerats via <strong><code>add_action()<\/code><\/strong>-funktionen endast att f\u00e5 ett argument. Men ibland kan du beh\u00f6va skicka extra data till callback-funktionen.<\/p>\n<p>Av denna anledning accepterar <strong><code>add_action()<\/code><\/strong>-funktionen en valfri parameter f\u00f6r att st\u00e4lla in antalet argument.<\/p>\n<p><span style=\"font-size: 1rem\">Ett bra exempel p\u00e5 detta \u00e4r<\/span> <a href=\"https:\/\/developer.wordpress.org\/reference\/hooks\/comment_post\/\" target=\"_blank\" rel=\"noopener noreferrer\">comment_post<\/a>-\u00e5tg\u00e4rden.<span style=\"font-size: 1rem\"> Denna \u00e5tg\u00e4rd k\u00f6rs omedelbart efter att <a href=\"https:\/\/kinsta.com\/se\/blog\/wordpress-kommentar-pluginsen\/\" target=\"_blank\" rel=\"noopener noreferrer\">WordPress l\u00e4gger till en kommentar till databasen<\/a>. Om du inte st\u00e4ller in parametern <strong><code>number of arguments<\/code><\/strong>, kommer det att skicka endast ett enda v\u00e4rde till callback-funktionen, vilket i detta fall kommer att vara <\/span><code><strong>comment_ID<\/strong><\/code><span style=\"font-size: 1rem\">.<\/span><\/p>\n<pre><code class=\"language-php\">\/\/ register the hook with 'priority' and 'number of arguments' parameters\nadd_action( 'comment_post', 'show_message_function', 10, 3 );\n\n\/\/ define the callback function\nfunction show_message_function( $comment_ID, $comment_approved, $commentdata ) {\n\u00a0 \u00a0 \/\/ check whether a comment is approved with the second parameter\n\u00a0 \u00a0 if( 1 === $comment_approved ){\n\u00a0 \u00a0 \u00a0 \u00a0 \/\/ runs the code only if the comment is approved\n\u00a0 \u00a0 }\n}<\/code><\/pre>\n<p>Om du st\u00e4ller in parametern <b>number of arguments <\/b>till <strong>3<\/strong> som i exemplet ovan, kommer \u00e5tg\u00e4rdsfunktionen att skicka tre v\u00e4rden: <strong><code>comment_ID<\/code><\/strong>, <strong><code>comment_approved<\/code><\/strong> och <strong><code>commentdata<\/code><\/strong>.<\/p>\n<p>WordPress st\u00e4ller in <strong><code>comment_approved<\/code><\/strong>-v\u00e4rdet till <strong>1<\/strong> f\u00f6r godk\u00e4nda kommentarer, <strong>0<\/strong> om den inte \u00e4r godk\u00e4nd och &#8221;<strong>spam<\/strong>&#8221; om <a href=\"https:\/\/kinsta.com\/se\/blog\/wordpress-spam-kommentarer\/\" target=\"_blank\" rel=\"noopener noreferrer\">kommentaren \u00e4r markerad som spam<\/a>.<\/p>\n<p><strong><code>commentdata<\/code><\/strong>-variabeln \u00e4r en array som inneh\u00e5ller alla kommentardata, som kommentarf\u00f6rfattarens namn, e-postadress, webbplats och inneh\u00e5llet i sj\u00e4lva kommentaren. Du kan kolla in WordPress Codex f\u00f6r att hitta alla <a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/wp_new_comment\/#parameters\" target=\"_blank\" rel=\"noopener noreferrer\">nyckelv\u00e4rdespar som ing\u00e5r i &#8221;commentdata&#8221;-arrayen<\/a>.<\/p>\n<p>Du kan ha s\u00e5 m\u00e5nga argument som du vill, men callback-funktionen och <strong><code>add_action()<\/code><\/strong>-funktionen m\u00e5ste ha samma antal argument.<\/p>\n<p>Genom att skicka ytterligare parametrar till callback-funktionen kan du g\u00f6ra mer med din kod. Du kan till exempel kontrollera om en kommentar \u00e4r godk\u00e4nd eller inte och automatiskt <a href=\"https:\/\/kinsta.com\/se\/blog\/wordpress-spam-kommentarer\/#3-enable-comment-moderation\">mejla kommentartexten till administrat\u00f6ren om den \u00e4r godk\u00e4nd<\/a>. Det \u00e4r inte m\u00f6jligt att g\u00f6ra detta utan att ange de ytterligare argumenten eftersom din callback-funktion inte har tillg\u00e5ng till <strong><code>comment_content<\/code><\/strong>-data.<\/p>\n<p>Om du inte vill ange prioritet, utan bara vill \u00e4ndra antalet argument, m\u00e5ste du fortfarande ange en prioritet. Anv\u00e4nd bara standardv\u00e4rdet (dvs 10).<\/p>\n<h4>Hur WordPressk\u00e4rnan anv\u00e4nder \u00e5tg\u00e4rder<\/h4>\n<p>WordPressk\u00e4rnan anv\u00e4nder sj\u00e4lv m\u00e5nga av sina inbyggda \u00e5tg\u00e4rder f\u00f6r att utf\u00f6ra olika funktioner.<\/p>\n<p>Ta till exempel <a href=\"https:\/\/developer.wordpress.org\/reference\/hooks\/wp_head\/\" target=\"_blank\" rel=\"noopener noreferrer\">wp_head<\/a>-\u00e5tg\u00e4rden. Den avfyras n\u00e4r WordPress matar ut webbsidans header-sektion (koden mellan <strong><code>&lt;head&gt;<\/code><\/strong> och <strong><code>&lt;\/head&gt;<\/code><\/strong>).<\/p>\n<p>Du kan hitta de flesta av WordPressk\u00e4rnans \u00e5tg\u00e4rdsfunktioner relaterade till <strong><code>wp_head<\/code><\/strong>-kroken i <strong><code>wp-includes\/default-filter.php-fil<\/code><\/strong>. Jag <a href=\"https:\/\/github.com\/WordPress\/WordPress\/blob\/master\/wp-includes\/default-filters.php\" target=\"_blank\" rel=\"noopener noreferrer\">kollade genom koden<\/a> och sammanst\u00e4llde en lista \u00f6ver alla <strong><code>add_action()<\/code><\/strong>-funktioner som anv\u00e4nder <strong><code>wp_head<\/code><\/strong>-\u00e5tg\u00e4rden.<\/p>\n<pre><code class=\"language-php\">add_action( 'wp_head', 'rest_output_link_wp_head', 10, 0 );\nadd_action( 'wp_head', '_wp_render_title_tag', 1 );\nadd_action( 'wp_head', 'wp_enqueue_scripts', 1 );\nadd_action( 'wp_head', 'wp_resource_hints', 2 );\nadd_action( 'wp_head', 'feed_links', 2 );\nadd_action( 'wp_head', 'feed_links_extra', 3 );\nadd_action( 'wp_head', 'rsd_link' );\nadd_action( 'wp_head', 'wlwmanifest_link' );\nadd_action( 'wp_head', 'adjacent_posts_rel_link_wp_head', 10, 0 );\nadd_action( 'wp_head', 'locale_stylesheet' );\nadd_action( 'wp_head', 'noindex', 1 );\nadd_action( 'wp_head', 'print_emoji_detection_script', 7 );\nadd_action( 'wp_head', 'wp_print_styles', 8 );\nadd_action( 'wp_head', 'wp_print_head_scripts', 9 );\nadd_action( 'wp_head', 'wp_generator' );\nadd_action( 'wp_head', 'rel_canonical' );\nadd_action( 'wp_head', 'wp_shortlink_wp_head', 10, 0 );\nadd_action( 'wp_head', 'wp_custom_css_cb', 101 );\nadd_action( 'wp_head', 'wp_site_icon', 99 );\nadd_action( 'wp_head', 'wp_no_robots' );<\/code><\/pre>\n<p>Det d\u00e4r \u00e4r m\u00e5nga callback-funktioner som \u00e4r krokade p\u00e5 bara en enda \u00e5tg\u00e4rd. Att st\u00e4lla in <b><code>priority<\/code> <\/b>h\u00e4r \u00e4r avg\u00f6rande f\u00f6r att se till att de viktigaste krokfunktionerna k\u00f6rs f\u00f6rst.<\/p>\n<p>I ovanst\u00e5ende exempel \u00e4r det viktigare att ladda scripts med callback-funktionen <strong><code>wp_enqueue_scripts()<\/code><\/strong> (prioritet=1) \u00e4n att ladda metataggarna f\u00f6r webbplatsikonen med callback-funktionen <strong><code>wp_site_icon()<\/code><\/strong> (prioritet=99).<\/p>\n<aside role=\"note\" class=\"wp-block-kinsta-notice is-style-info\">\n            <h3>Info<\/h3>\n        <p>Alla callback-funktioner som anv\u00e4nds i ovanst\u00e5ende exempel \u00e4r WordPressfunktioner. Du kan anv\u00e4nda dem i din kod ocks\u00e5. Bes\u00f6k <a href=\"https:\/\/codex.wordpress.org\/Function_Reference\" target=\"_blank\" rel=\"noopener noreferrer\">Funktionsreferenssidan p\u00e5 WordPress Codex<\/a> f\u00f6r mer information.<\/p>\n<\/aside>\n\n<h4>Andra \u00e5tg\u00e4rdsfunktioner<\/h4>\n<p>Medan <strong><code>add_action()<\/code><\/strong> \u00e4r den mest anv\u00e4nda \u00e5tg\u00e4rdsfunktionen finns det m\u00e5nga andra som \u00e4r lika anv\u00e4ndbara. L\u00e5t oss ta en titt p\u00e5 hur de fungerar.<\/p>\n<ul>\n<li><a href=\"https:\/\/codex.wordpress.org\/Function_Reference\/has_action\">has_action()<\/a><\/li>\n<\/ul>\n<p>Denna \u00e5tg\u00e4rdsfunktion kontrollerar om en \u00e5tg\u00e4rd har krokats p\u00e5. Den accepterar tv\u00e5 parametrar. Den f\u00f6rsta \u00e4r \u00e5tg\u00e4rdens namn. Den andra parametern \u00e4r valfri och \u00e4r callback-funktionens namn.<\/p>\n<pre><code class=\"language-php\">has_action( 'action_name', 'function_to_check' );<\/code><\/pre>\n<p>Om du bara anger den f\u00f6rsta parametern returnerar den <b><code>true<\/code><\/b> om <em>n\u00e5gon<\/em> funktion \u00e4r krokad p\u00e5 <strong><code>action_name<\/code><\/strong>-parametern.<\/p>\n<p>Men om du ocks\u00e5 anger den andra parametern kommer den att returnera <b><code>false<\/code> <\/b>om den angivna callback-funktionen inte \u00e4r registrerad till den \u00e5tg\u00e4rden.<\/p>\n<p>Om den hittar callback-funktionen som \u00e4r kopplad till \u00e5tg\u00e4rdskroken returneras den <strong><code>priority<\/code><\/strong>\u00a0(ett heltal) som st\u00e4llts in f\u00f6r den funktionen p\u00e5 den h\u00e4r \u00e5tg\u00e4rdskroken.<\/p>\n<ul>\n<li><a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/do_action\/\" target=\"_blank\" rel=\"noopener noreferrer\">do_action()<\/a><\/li>\n<\/ul>\n<p>Vi har st\u00f6tt p\u00e5 denna \u00e5tg\u00e4rdsfunktion tidigare. WordPress anv\u00e4nder den f\u00f6r att definiera alla sina standard\u00e5tg\u00e4rder, vilket g\u00f6r det m\u00f6jligt att kroka p\u00e5 andra funktioner. Precis som WordPress kan du ocks\u00e5 anv\u00e4nda funktionen <strong><code>do_action()<\/code><\/strong> f\u00f6r att skapa en ny anpassad \u00e5tg\u00e4rd genom att ange ett nytt \u00e5tg\u00e4rdsnamn som parameter.<\/p>\n<pre><code class=\"language-php\">do_action( 'action_name', [argument1], [argument2] );<\/code><\/pre>\n<p>Att bara deklarera denna funktion kommer inte att g\u00f6ra n\u00e5got. Men den kommer att sitta kvar i koden och v\u00e4nta p\u00e5 att andra \u00e5tg\u00e4rdsfunktioner ska aktivera den. Att skicka n\u00e5gra extra argument \u00e4r valfritt, men det \u00e4r viktigt om du vill att dina callback-funktioner ska anv\u00e4nda dem.<\/p>\n<ul>\n<li><a href=\"https:\/\/codex.wordpress.org\/Function_Reference\/do_action_ref_array\">do_action_ref_array()<\/a><\/li>\n<\/ul>\n<p>Denna \u00e5tg\u00e4rdsfunktion \u00e4r identisk med <strong><code>do_action()<\/code><\/strong>, med ett undantag. Alla eventuella argument som skickas genom den m\u00e5ste vara en array. N\u00e4r du har m\u00e5nga argument att skicka eller om dina argument redan finns i en array \u00e4r denna funktion mycket hj\u00e4lpsam.<\/p>\n<pre><code class=\"language-php\">\/\/ here's an example array\n$arguments_array = array( 'arg_1', 'foo', true, 'arg_4' );\n\ndo_action_ref_array( 'example_action', $arguments_array );<\/code><\/pre>\n<p>Se till att argumenten du skickar kommer i r\u00e4tt ordning eftersom PHP-arrayer \u00e4r en ordnad karta.<\/p>\n<p>Ett exempel p\u00e5 den h\u00e4r \u00e5tg\u00e4rdsfunktionens anv\u00e4ndning \u00e4r <a href=\"https:\/\/developer.wordpress.org\/reference\/hooks\/admin_bar_menu\/\" target=\"_blank\" rel=\"noopener noreferrer\">admin_bar_menu<\/a>-\u00e5tg\u00e4rden. Den kan vara krokad att l\u00e4gga till, manipulera, eller ta bort de olika objekten i adminf\u00e4ltet. Alla adminf\u00e4ltsobjekt definieras som element i en array.<\/p>\n<ul>\n<li><a href=\"https:\/\/codex.wordpress.org\/Function_Reference\/did_action\">did_action()<\/a><\/li>\n<\/ul>\n<p>Om du vill r\u00e4kna antalet g\u00e5nger en \u00e5tg\u00e4rd avfyras, kan du anropa denna \u00e5tg\u00e4rdsfunktion.<\/p>\n<pre><code class=\"language-php\">did_action( 'action_name' );<\/code><\/pre>\n<p>Denna funktion returnerar ett heltal.<\/p>\n<p>Funktionen <code><strong>did_action()<\/strong><\/code>\u00a0\u00e4r extremt praktisk n\u00e4r du bara vill k\u00f6ra en callback-funktion f\u00f6rsta g\u00e5ngen en \u00e5tg\u00e4rd k\u00f6rs och aldrig mer.<\/p>\n<pre><code class=\"language-php\">function example_callback_function() {\n    if( did_action( 'example_action' ) === 1 ) {\n    \/\/ checks if the 'example_action' hook is fired once, and only runs then, and never again!\n    }\n}\nadd_action('example_action', 'example_callback_function');<\/code><\/pre>\n<ul>\n<li><a href=\"https:\/\/codex.wordpress.org\/Function_Reference\/remove_action\">remove_action()<\/a><\/li>\n<\/ul>\n<p>Den h\u00e4r \u00e5tg\u00e4rdsfunktionen tar bort en callback-funktion som \u00e4r krokad p\u00e5 den angivna \u00e5tg\u00e4rden. Du kan till exempel anv\u00e4nda den h\u00e4r funktionen f\u00f6r att ta bort WordPress standardfunktioner som \u00e4r krokade p\u00e5 inbyggda \u00e5tg\u00e4rder och ers\u00e4tta dem med din egen.<\/p>\n<pre><code class=\"language-php\">remove_action( 'action_name', 'function_to_be_removed', [priority] );<\/code><\/pre>\n<p>Det finns n\u00e5gra f\u00f6ruts\u00e4ttningar f\u00f6r att anropa funktionen <code><strong>remove_action()<\/strong><\/code>:<\/p>\n<ol>\n<li>Parametrarna <strong><code>function_to_be_removed<\/code><\/strong> och <strong><code>priority<\/code><\/strong> m\u00e5ste vara likadana som de som ursprungligen anv\u00e4ndes i <strong><code>add_action()<\/code><\/strong>-funktionen.<\/li>\n<li>Du kan inte anropa funktionen <strong><code>remove_action()<\/code><\/strong> Du m\u00e5ste anropa den inifr\u00e5n en annan funktion.<\/li>\n<li>Om callback-funktionen \u00e4r registrerad fr\u00e5n en <em>klass<\/em> finns det andra krav f\u00f6r att ta bort den. Du kan kolla in WordPress Codex-dokumentationen f\u00f6r mer information.<\/li>\n<li>Du kan inte ta bort callback-funktionen innan den \u00e4r registrerad eller efter att den har k\u00f6rts.<\/li>\n<\/ol>\n<p>H\u00e4r \u00e4r ett exempel p\u00e5 hur <a href=\"https:\/\/kinsta.com\/se\/blog\/woocommerce-guide\/\" target=\"_blank\" rel=\"noopener noreferrer\">WooCommerce<\/a> anv\u00e4nder den h\u00e4r \u00e5tg\u00e4rdsfunktionen f\u00f6r att ta bort den vanliga produktminiatyren p\u00e5 butikssidan.<\/p>\n<pre><code class=\"language-php\">remove_action( 'woocommerce_before_shop_loop_item_title', 'woocommerce_template_loop_product_thumbnail', 10 );<\/code><\/pre>\n<ul>\n<li><a href=\"https:\/\/codex.wordpress.org\/Function_Reference\/remove_all_actions\">remove_all_actions()<\/a><\/li>\n<\/ul>\n<p>Denna \u00e5tg\u00e4rdsfunktion tar bort allt som \u00e4r krokat p\u00e5 en \u00e5tg\u00e4rd. Prioritetsparametern \u00e4r valfri.<\/p>\n<pre><code class=\"language-php\">remove_all_actions( 'action_name', [priority] );<\/code><\/pre>\n<p>Kom ih\u00e5g att den h\u00e4r funktionen inte kan anropas fr\u00e5n den \u00e5tg\u00e4rd du vill avregistrera callback-funktioner fr\u00e5n. Det skulle orsaka en o\u00e4ndlig slinga. Du kan kroka p\u00e5 en \u00e5tg\u00e4rd som har avfyrats tidigare f\u00f6r att k\u00f6ra den h\u00e4r funktionen utan fel.<\/p>\n<ul>\n<li><a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/doing_action\/\">doing_action()<\/a><\/li>\n<\/ul>\n<p>Denna \u00e5tg\u00e4rdsfunktion kontrollerar om den angivna \u00e5tg\u00e4rden k\u00f6rs eller inte. Det returnerar ett booleskt v\u00e4rde (<b><code>true<\/code><\/b> eller <strong><code>false<\/code><\/strong>).<\/p>\n<pre><code class=\"language-php\">\/\/ check whether the 'action_name' action is being executed\nif ( doing_action( 'action_name' ) ) {\n\u00a0 \u00a0 \/\/ execute your code here\n}<\/code><\/pre>\n<p>Du kan l\u00e4mna parametern <code><strong>action_name<\/strong><\/code>\u00a0tom f\u00f6r att kontrollera om <em>n\u00e5gon<\/em> \u00e5tg\u00e4rd exekveras. Det kommer att vara <strong><code>true<\/code><\/strong> varje g\u00e5ng en \u00e5tg\u00e4rd avfyras.<\/p>\n<pre><code class=\"language-php\">\/\/ check if any action is running and do something\nif ( doing_action() ) {\n  \u00a0 \/\/ the code here is run when any action is fired\n}<\/code><\/pre>\n<h4>\u00c5tg\u00e4rdsexempel 1: visa ett underh\u00e5llsmeddelande f\u00f6r dina bes\u00f6kare<\/h4>\n<p>Ibland \u00e4r det b\u00e4st att ta din webbplats offline och skapa en <a href=\"https:\/\/kinsta.com\/se\/blog\/underhall-av-wordpress\/\" target=\"_blank\" rel=\"noopener noreferrer\">Under Underh\u00e5lls-sida<\/a>. Tack och lov ger WordPress oss ett enkelt s\u00e4tt att g\u00f6ra just det.<\/p>\n<pre><code class=\"language-php\">\/\/ show a maintenance message for all your site visitors\nadd_action( 'get_header', 'maintenance_message' );\nfunction maintenance_message() {\n    if (current_user_can( 'edit_posts' )) return;\n    wp_die( '&lt;h1&gt;Stay Pawsitive!&lt;\/h1&gt;&lt;br&gt;Sorry, we\\'re temporarily down for maintenance right meow.' );\n}<\/code><\/pre>\n<p>L\u00e5t oss bryta ner koden och g\u00e5 igenom varje steg:<\/p>\n<ul>\n<li><a href=\"https:\/\/developer.wordpress.org\/reference\/hooks\/get_header\/\" target=\"_blank\" rel=\"noopener noreferrer\">get_header<\/a> \u00e4r en \u00e5tg\u00e4rd som utl\u00f6ses innan header-mallfilen p\u00e5 webbplatsen laddas. Det \u00e4r en perfekt \u00e5tg\u00e4rd att kroka p\u00e5 om du vill hindra huvudsidan fr\u00e5n att laddas.<\/li>\n<li>Kroka <strong><code>get_header<\/code><\/strong>-\u00e5tg\u00e4rden p\u00e5 funktionen <strong><code>add_action()<\/code><\/strong> med callback-funktionen <strong><code>maintenance_message()<\/code><\/strong>.<\/li>\n<li>Definiera callback-funktionen <strong><code>maintenance_message()<\/code><\/strong>.<\/li>\n<li><strong><code>current_user_can ('edit_posts')<\/code><\/strong> \u00e4r en <a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/current_user_can\/\" target=\"_blank\" rel=\"noopener noreferrer\">anv\u00e4ndarkapacitetstestfunktion<\/a> som kontrollerar om den aktuella anv\u00e4ndaren \u00e4r inloggad och <a href=\"https:\/\/wordpress.org\/support\/article\/roles-and-capabilities\/#edit_posts\" target=\"_blank\" rel=\"noopener noreferrer\">kan redigera inl\u00e4gg<\/a>. <a href=\"https:\/\/kinsta.com\/se\/blog\/anvandarregistreringsplugin-wordpress\/\" target=\"_blank\" rel=\"noopener noreferrer\">Alla anv\u00e4ndare som \u00e4r registrerade p\u00e5 en WordPress-webbplats<\/a> f\u00f6rutom de med prenumerantroller har m\u00f6jlighet att redigera inl\u00e4gg. Det finns andra bra s\u00e4tt att utf\u00f6ra denna kontroll, men vi kommer att h\u00e5lla oss till denna enkla metod h\u00e4r.<\/li>\n<li>Anv\u00e4nd standardfunktionen <a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/wp_die\/\" target=\"_blank\" rel=\"noopener noreferrer\">wp_die()<\/a> f\u00f6r att d\u00f6da WordPress-exekveringen snyggt och prydligt och visa en HTML-sida med ett felmeddelande. Du kan anv\u00e4nda HTML-syntax i felmeddelandeparametern f\u00f6r att formatera den.<\/li>\n<\/ul>\n<p>Efter att ha sparat koden i mitt anpassade plugin laddade jag upp min lokala WordPress-installation i privat surfl\u00e4ge. <strong>Under Underh\u00e5ll-<\/strong>sidan \u00e4r klar!<\/p>\n<figure id=\"attachment_72274\" aria-describedby=\"caption-attachment-72274\" style=\"width: 1100px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-72274 size-full\" src=\"https:\/\/kinsta.com\/se\/wp-content\/uploads\/sites\/9\/2020\/09\/visa-ett-felmeddelande-for-webbplatsbesokare.png\" alt=\"Visa ett felmeddelande f\u00f6r webbplatsbes\u00f6kare\" width=\"1100\" height=\"500\"><figcaption id=\"caption-attachment-72274\" class=\"wp-caption-text\">Visa ett felmeddelande f\u00f6r webbplatsbes\u00f6kare<\/figcaption><\/figure>\n<p>Webbplatsen laddas framg\u00e5ngsrikt om jag \u00e4r inloggad eftersom den klarar anv\u00e4ndarkapacitetstestet. Du kan nu forts\u00e4tta arbeta med att fixa din webbplats medan den visar vanliga bes\u00f6kare den h\u00e4r sidan.<\/p>\n<h4>\u00c5tg\u00e4rdsexempel 2: D\u00f6lj instrumentpanelens menyalternativ fr\u00e5n anv\u00e4ndare som inte har administrat\u00f6rsroller<\/h4>\n<p>Om du driver en <a href=\"https:\/\/kinsta.com\/se\/blog\/sa-andrar-du-forfattare-i-wordpress\/\" target=\"_blank\" rel=\"noopener noreferrer\">blogg med flera f\u00f6rfattare<\/a> eller <a href=\"https:\/\/kinsta.com\/se\/blog\/wordpress-underhall\/\" target=\"_blank\" rel=\"noopener noreferrer\">hanterar en webbplats \u00e5t dina klienter<\/a>, d\u00e5 kan du beh\u00f6va d\u00f6lja vissa adminmenyer fr\u00e5n <a href=\"https:\/\/kinsta.com\/se\/blog\/wordpress-admin\/\" target=\"_blank\" rel=\"noopener noreferrer\">WordPress-panelen<\/a> f\u00f6r icke-adminanv\u00e4ndare. Du kan g\u00f6ra det genom att kroka p\u00e5 <strong><code>admin_menu<\/code><\/strong>-\u00e5tg\u00e4rden.<\/p>\n<pre><code class=\"language-php\">\/\/ remove specific dashboard menus for non-admin users\nadd_action( 'admin_menu', 'hide_admin_menus' );\nfunction hide_admin_menus() {\n    if (current_user_can( 'create_users' )) return;\n    if (wp_get_current_user()-&gt;display_name == \"Salman\") return; \n    remove_menu_page( 'plugins.php' ); \n    remove_menu_page( 'themes.php' ); \n    remove_menu_page( 'tools.php' ); \n    remove_menu_page( 'users.php' ); \n    remove_menu_page( 'edit.php?post_type=page' ); \n    remove_menu_page( 'options-general.php' );\n}<\/code><\/pre>\n<p>H\u00e4r \u00e4r en genomg\u00e5ng i steg f\u00f6r steg av kodavsnittet ovan:<\/p>\n<ul>\n<li><a href=\"https:\/\/developer.wordpress.org\/reference\/hooks\/admin_menu\/\" target=\"_blank\" rel=\"noopener noreferrer\">admin_menu<\/a> \u00e4r en \u00e5tg\u00e4rd som utl\u00f6ses innan admin-menyn laddas i WordPresspanelen.<\/li>\n<li>Kroka <strong><code>admin_menu<\/code><\/strong>-\u00e5tg\u00e4rden p\u00e5 <strong><code>add_action()<\/code><\/strong>-funktionen med callback-funktionen <strong><code>hide_admin_menus()<\/code><\/strong>.<\/li>\n<li>Callback-funktionen <strong><code>hide_admin_menus()<\/code><\/strong> definierar kodens logik. Den k\u00f6rs varje g\u00e5ng <strong><code>admin_menu<\/code><\/strong>-\u00e5tg\u00e4rden avfyras.<\/li>\n<li>Inuti callback-funktionen kontrollerar funktionen <strong><code>current_user_can ('create_users')<\/code><\/strong> om den inloggade anv\u00e4ndaren \u00e4r en administrat\u00f6r. Eftersom endast webbplatsadministrat\u00f6rer har <strong><code>create_user-<\/code><\/strong>funktionen avslutas funktionen med ett <strong><code>return<\/code><\/strong>-meddelande om anv\u00e4ndaren \u00e4r en administrat\u00f6r.<\/li>\n<li>WordPressfunktionen <a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/wp_get_current_user\/\" target=\"_blank\" rel=\"noopener noreferrer\">wp_get_current_user()<\/a> h\u00e4mtar det aktuella anv\u00e4ndarobjektet. Med den h\u00e4r funktionen kan vi kontrollera om den inloggade anv\u00e4ndaren har en <strong><code>display_name<\/code><\/strong> inst\u00e4lld. Detta \u00e4r en valfri rad, om du vill utel\u00e4mna vissa icke-adminanv\u00e4ndare fr\u00e5n att utel\u00e5sas p\u00e5 grund av denna callback-funktion.<\/li>\n<li>WordPressfunktionen <a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/remove_menu_page\/\" target=\"_blank\" rel=\"noopener noreferrer\">remove_menu_page()<\/a> tar bort adminmenyer p\u00e5 den h\u00f6gsta niv\u00e5n. I kodexemplet ovan tar jag bort f\u00f6ljande adminmenyer: Plugins, teman, verktyg, anv\u00e4ndare, sidor och alternativ.<\/li>\n<\/ul>\n<p>Efter att ha sparat plugin-filen ser WordPresspanelen ut s\u00e5 h\u00e4r med en admin inloggad.<\/p>\n<figure id=\"attachment_72251\" aria-describedby=\"caption-attachment-72251\" style=\"width: 1100px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-72251 size-full\" src=\"https:\/\/kinsta.com\/se\/wp-content\/uploads\/sites\/9\/2020\/09\/wordpress-standard-adminpanel.png\" alt=\"WordPress standard-adminpanel\" width=\"1100\" height=\"500\"><figcaption id=\"caption-attachment-72251\" class=\"wp-caption-text\">WordPress standard-adminpanel<\/figcaption><\/figure>\n<p>Och s\u00e5 h\u00e4r ser den ut med en icke-adminanv\u00e4ndare inloggad.<\/p>\n<figure id=\"attachment_72249\" aria-describedby=\"caption-attachment-72249\" style=\"width: 1100px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-72249 size-full\" src=\"https:\/\/kinsta.com\/se\/wp-content\/uploads\/sites\/9\/2020\/09\/adminmenyalternativ.png\" alt=\"D\u00f6lj k\u00e4nsliga adminmenyalternativ fr\u00e5n icke-adminanv\u00e4ndare\" width=\"1100\" height=\"500\"><figcaption id=\"caption-attachment-72249\" class=\"wp-caption-text\">D\u00f6lj k\u00e4nsliga adminmenyalternativ fr\u00e5n icke-adminanv\u00e4ndare<\/figcaption><\/figure>\n<p>Denna l\u00f6sning d\u00f6ljer bara de angivna adminmenyalternativen fr\u00e5n att visas i WordPresspanelen. Alla anv\u00e4ndare kan fortfarande komma \u00e5t dem genom att ange menyadresserna i sina webbl\u00e4sare.<\/p>\n<p>F\u00f6r att inaktivera vissa <a href=\"https:\/\/kinsta.com\/se\/blog\/wordpress-anvanderroller\/\" target=\"_blank\" rel=\"noopener noreferrer\">anv\u00e4ndarroller<\/a> fr\u00e5n att komma \u00e5t specifika menyer m\u00e5ste du redigera vad de f\u00e5r och inte f\u00e5r g\u00f6ra.<\/p>\n<h3>Kroka p\u00e5 ett filter<\/h3>\n<p>Filter g\u00f6r det m\u00f6jligt f\u00f6r din anpassade kod att \u00e4ndra data som anv\u00e4nds av andra WordPressfunktioner. Till skillnad fr\u00e5n \u00e5tg\u00e4rder m\u00e5ste funktioner som \u00e4r krokade p\u00e5 filter returnera ett v\u00e4rde.<\/p>\n<h4>Filterfunktionen add_filter()<\/h4>\n<p>Du kan kroka en callback-funktion p\u00e5 ett filter genom att f\u00f6lja dessa steg:<\/p>\n<ol>\n<li>Definiera en <strong>callback-funktion<\/strong> som kommer att k\u00f6ras n\u00e4r WordPress avfyras filtret. Callback-funktioner f\u00f6r filter m\u00e5ste ha minst ett argument specificerat, eftersom alla filter skickar minst ett v\u00e4rde till sina callback-funktioner.<\/li>\n<li>Registrera callback-funktionen till ett filter med funktionen <strong><code>add_filter()<\/code><\/strong>. Filtret tar hand om att anropa callback-funktionen. Enligt WordPress Codex m\u00e5ste <a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/add_filter\/\" target=\"_blank\" rel=\"noopener noreferrer\">add_filter()<\/a>-funktionen skicka minst tv\u00e5 parametrar:\n<ul>\n<li>Namnet p\u00e5 filtret som ska krokas p\u00e5.<\/li>\n<li>Namnet p\u00e5 den callback-funktion som k\u00f6rs n\u00e4r filtret avfyras.<\/li>\n<\/ul>\n<\/li>\n<li>Funktionen <strong><code>add_filter()<\/code><\/strong> accepterar ocks\u00e5 tv\u00e5 ytterligare valfria parametrar f\u00f6r att st\u00e4lla in <strong><code>priority<\/code><\/strong>\u00a0f\u00f6r och <strong><code>number of arguments<\/code><\/strong>. Dessa parametrar fungerar p\u00e5 samma s\u00e4tt som med <strong><code>add_action()<\/code><\/strong>-funktionen.<\/li>\n<\/ol>\n<p>H\u00e4r \u00e4r ett exempel p\u00e5 hur du kan anv\u00e4nda funktionen <strong><code>add_filter()<\/code><\/strong> f\u00f6r att kroka en callback-funktion till ett filter.<\/p>\n<pre><code class=\"language-php\">\/\/ define the filter callback function with at least one argument passed\n\/\/ the number of arguments that you can pass depends on how the filter is defined\nfunction filter_callback_function( $arg1, $arg2 ) {\n\u00a0 \u00a0 \/\/ make your code do something with the arguments and return something\n\u00a0 \u00a0 return $something;\n}\n\n\/\/ now hook the callback function to the 'example_filter'\nadd_filter( 'example_filter', 'filter_callback_function', [priority], [no_of_args] );\n\n\/\/ '10' is the default priority set for the callback function\n\/\/ and '1' is the default number of arguments passed<\/code><\/pre>\n<h4>Exempel p\u00e5 att kroka p\u00e5 ett filter<\/h4>\n<p>WordPress tillhandah\u00e5ller ett filter som heter <a href=\"https:\/\/codex.wordpress.org\/Plugin_API\/Filter_Reference\/login_message\" target=\"_blank\" rel=\"noopener noreferrer\">login_message<\/a> f\u00f6r att filtrera meddelandet som visas p\u00e5 inloggningssidan ovanf\u00f6r inloggningsformul\u00e4ret. V\u00e4rdet som returneras av detta filter kan ha <a href=\"https:\/\/kinsta.com\/se\/blog\/gratis-html-redigerare\/\" target=\"_blank\" rel=\"noopener noreferrer\">HTML-kod<\/a>.<\/p>\n<p>L\u00e5t oss kroka p\u00e5 <strong><code>login_message<\/code><\/strong>-filtret och \u00e4ndra meddelandet som visas p\u00e5 inloggningssk\u00e4rmen.<\/p>\n<pre><code class=\"language-php\">\/\/ show a custom login message above the login form\nfunction custom_login_message( $message ) {\n\u00a0 \u00a0 if ( empty( $message ) ) {\n\u00a0 \u00a0 \u00a0 \u00a0 return \"&lt;h2&gt;Welcome to Let's Develop by Salman Ravoof! Please log in to start learning.&lt;\/h2&gt;\";\n\u00a0 \u00a0 } \n    else {\n\u00a0 \u00a0 \u00a0 \u00a0 return $message;\n\u00a0 \u00a0 }\n}\nadd_filter( 'login_message', 'custom_login_message' );<\/code><\/pre>\n<p><strong><code>If-else<\/code><\/strong>-uttrycket i callback-funktionen kontrollerar om inloggningsmeddelandet redan \u00e4r inst\u00e4llt, oftast av ett annat plugin eller tema. I s\u00e5dana fall returnerar callback-funktionen det ursprungliga v\u00e4rdet utan att g\u00f6ra n\u00e5gra \u00e4ndringar. Detta \u00e4r ett s\u00e4tt att undvika konflikter med andra plugins eller teman.<\/p>\n<p>Du kan se meddelandet ovanf\u00f6r inloggningsformul\u00e4ret p\u00e5 <a href=\"https:\/\/kinsta.com\/se\/blog\/wordpress-inloggningsadress\/\" target=\"_blank\" rel=\"noopener noreferrer\">WordPress-inloggningssidan<\/a>.<\/p>\n<figure id=\"attachment_72252\" aria-describedby=\"caption-attachment-72252\" style=\"width: 1100px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-72252 size-full\" src=\"https:\/\/kinsta.com\/se\/wp-content\/uploads\/sites\/9\/2020\/09\/inloggningsmeddelande-ovanfor-inloggningsformularet.png\" alt=\"Visa ett eget inloggningsmeddelande ovanf\u00f6r inloggningsformul\u00e4ret\" width=\"1100\" height=\"514\"><figcaption id=\"caption-attachment-72252\" class=\"wp-caption-text\">Visa ett eget inloggningsmeddelande ovanf\u00f6r inloggningsformul\u00e4ret<\/figcaption><\/figure>\n<p>Du kan formatera alla element p\u00e5 inloggningssidan genom att k\u00f6a anpassade formatmallar. Om du g\u00f6r det kan du helt anpassa din standardinloggningssida f\u00f6r WordPress.<\/p>\n<p>Du l\u00e4r dig att ladda anpassade formatmallar med hj\u00e4lp av \u00e5tg\u00e4rder i avsnittet &#8221;Anpassa WordPress-inloggningssidan med krokar&#8221;.<\/p>\n<h4>Hitta filter som st\u00f6ds av WordPress<\/h4>\n<p>Varhelst WordPress behandlar eller \u00e4ndrar data kan du n\u00e4stan s\u00e4kert hitta ett filter att kroka p\u00e5 och \u00e4ndra. T\u00e4nk p\u00e5 filter som ett gr\u00e4nssnitt mellan <a href=\"https:\/\/kinsta.com\/blog\/wordpress-repair-database\/\" target=\"_blank\" rel=\"noopener noreferrer\">WordPress-databasen<\/a> och webbl\u00e4saren.<\/p>\n<p>Du kan hitta en omfattande lista \u00f6ver alla filter som st\u00f6ds av WordPress p\u00e5 sidan \u00f6ver <a href=\"https:\/\/codex.wordpress.org\/Plugin_API\/Filter_Reference\" target=\"_blank\" rel=\"noopener noreferrer\">Plugin API\/filterreferenser<\/a>.<\/p>\n<figure id=\"attachment_72258\" aria-describedby=\"caption-attachment-72258\" style=\"width: 1100px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-72258 size-full\" src=\"https:\/\/kinsta.com\/se\/wp-content\/uploads\/sites\/9\/2020\/09\/wordpress-ger-en-mangd-olika-filter-att-kroka-pa.png\" alt=\"WordPress ger en m\u00e4ngd olika filter att kroka p\u00e5\" width=\"1100\" height=\"514\"><figcaption id=\"caption-attachment-72258\" class=\"wp-caption-text\">WordPress ger en m\u00e4ngd olika filter att kroka p\u00e5<\/figcaption><\/figure>\n<p>Alla filter som anges d\u00e4r delas upp i flera kategorier och ordnas fr\u00e5n topp till t\u00e5 i WordPress exekveringsordning.<\/p>\n<p>Om du vill hitta filter att kroka p\u00e5 WordPress k\u00e4llkod, g\u00f6r en s\u00f6kning efter termen &#8221;<strong><code>apply_filters<\/code><\/strong>&#8221; s\u00e5 f\u00e5r du massor av resultat. <a href=\"https:\/\/developer.wordpress.org\/reference\/\" target=\"_blank\" rel=\"noopener noreferrer\">WordPress Code reference<\/a> \u00e4r ocks\u00e5 ett bra st\u00e4lle att s\u00f6ka efter allt som ing\u00e5r i WordPress, inklusive \u00e5tg\u00e4rder och filter.<\/p>\n<h4>Hur WordPressk\u00e4rnan anv\u00e4nder filter<\/h4>\n<p>Sj\u00e4lva WordPressk\u00e4rnan anv\u00e4nder en hel del av sina inbyggda filter f\u00f6r att \u00e4ndra data som anv\u00e4nds av dess olika funktioner.<\/p>\n<p>T\u00e4nk p\u00e5 <a href=\"https:\/\/developer.wordpress.org\/reference\/hooks\/the_content\/\" target=\"_blank\" rel=\"noopener noreferrer\">the_content<\/a>-filtret till exempel. Det filtrerar inl\u00e4ggsinneh\u00e5ll efter att det h\u00e4mtats fr\u00e5n databasen och innan det visas i webbl\u00e4saren.<\/p>\n<p>Precis som med \u00e5tg\u00e4rder, kan du hitta de flesta av WordPressk\u00e4rnans filterfunktioner relaterade till <code><strong>the_content<\/strong><\/code>-kroken i <strong><code>wp-includes\/default-filter.php<\/code><\/strong>-filen.<\/p>\n<p>H\u00e4r \u00e4r en lista \u00f6ver alla k\u00e4rnans<code><strong>add_filter()<\/strong><\/code>-funktioner som kan krokas p\u00e5 <code><strong>the_content<\/strong><\/code>-filtret:<\/p>\n<pre><code class=\"language-php\">add_filter( 'the_content', 'do_blocks', 9 );\nadd_filter( 'the_content', 'wptexturize' );\nadd_filter( 'the_content', 'convert_smilies', 20 );\nadd_filter( 'the_content', 'wpautop' );\nadd_filter( 'the_content', 'shortcode_unautop' );\nadd_filter( 'the_content', 'prepend_attachment' );\nadd_filter( 'the_content', 'wp_make_content_images_responsive' );\nadd_filter( 'the_content', 'do_shortcode', 11 ); \/\/ AFTER wpautop().\u00a0<\/code><\/pre>\n<p>Notera prioriteten som anges f\u00f6r vissa callback-funktioner.<\/p>\n<p>Till exempel parsar funktionen <a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/do_blocks\/\" target=\"_blank\" rel=\"noopener noreferrer\">do_blocks()<\/a> eventuella dynamiska block i inl\u00e4ggsinneh\u00e5llet och \u00e5terparsar dem f\u00f6r att bli kompatibla med <a href=\"https:\/\/kinsta.com\/se\/blog\/wordpress-gutenberg-redigeraren\/\" target=\"_blank\" rel=\"noopener noreferrer\">WordPress nya blockredigerare<\/a>. Den har en h\u00f6gre prioritet \u00e4n standard (10) f\u00f6r att se till att inneh\u00e5llet \u00e4r blockerat innan de andra funktionerna k\u00f6rs.<\/p>\n<p>Funktionen <a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/convert_smilies\/\" target=\"_blank\" rel=\"noopener noreferrer\">convert_smilies()<\/a> \u00e4r inst\u00e4lld p\u00e5 att k\u00f6ras med l\u00e4gre prioritet eftersom dess uppgift \u00e4r att konvertera text-smileys till bild-sprites. D\u00e4rf\u00f6r \u00e4r det bra att det k\u00f6rs efter att allt inl\u00e4ggsinneh\u00e5ll har filtrerats.<\/p>\n<p>Kortkoder \u00e4r en sorts filter. De tar emot information kortkoden, bearbetar den och returnerar sedan tillbaka resultatet. L\u00e4s mer om kortkoder i denna <a href=\"https:\/\/kinsta.com\/se\/blog\/wordpress-kortkoder\/\">ultimata guide till WordPress-kortkoder<\/a>.<\/p>\n<h4>Andra filterfunktioner<\/h4>\n<p>Medan <code><strong>add_filter()<\/strong><\/code>\u00e4r den mest anv\u00e4nda filterfunktionen finns det m\u00e5nga andra anv\u00e4ndbara filterfunktioner. L\u00e5t oss diskutera dem alla ordentligt.<\/p>\n<ul>\n<li><a href=\"https:\/\/codex.wordpress.org\/Function_Reference\/has_filter\">has_filter()<\/a><\/li>\n<\/ul>\n<p>Denna funktion kontrollerar om det angivna filtret \u00e4r krokat p\u00e5 en funktion. Den accepterar tv\u00e5 parametrar. Den f\u00f6rsta parametern anger filternamnet. Den andra parametern \u00e4r valfri och anger namnet p\u00e5 callback-funktionen.<\/p>\n<pre><code class=\"language-php\">has_filter( 'filter_name', 'function_to_check' );<\/code><\/pre>\n<p>Om du bara anger den f\u00f6rsta parametern kommer den att returnera <strong><code>true<\/code><\/strong> om <strong><code>filter_name<\/code><\/strong> \u00e4r krokad p\u00e5 <em>vilken funktion som helst<\/em>.<\/p>\n<p>Men om du anger b\u00e5da parametrarna kommer den att returnera <strong><code>false<\/code><\/strong> om den n\u00e4mnda callback-funktionen inte \u00e4r registrerad med det givna filtret. Om den hittar callback-funktionen som \u00e4r registrerad med filtret returneras den <strong><code>priority<\/code><\/strong> (heltal) som st\u00e4llts in f\u00f6r den funktionen i det h\u00e4r filtret.<\/p>\n<p>En m\u00f6jlig till\u00e4mpning av <strong><code>has_filter()<\/code><\/strong>-funktionen \u00e4r att kontrollera om ett filter redan har krokats p\u00e5, och baserat p\u00e5 det forts\u00e4tta med kodexekveringen.<\/p>\n<pre><code class=\"language-php\">\/\/ check to see if 'the_content' filter has been hooked\nif ( ! has_filter( 'the_content' ) {\n\u00a0 \u00a0 \/\/ hook the filter if and only if it hasn't been hooked before\n\u00a0 \u00a0 add_filter( 'the_content', 'modify_the_content' );\n}<\/code><\/pre>\n<ul>\n<li><a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/apply_filters\/\">apply_filters()<\/a><\/li>\n<\/ul>\n<p>Denna filterfunktion \u00e4r som \u00e5tg\u00e4rdsfunktionen <strong><code>do_action()<\/code><\/strong>. Alla callback-funktioner som \u00e4r krokade p\u00e5 detta filter kommer k\u00f6ras varhelst den h\u00e4r funktionen finns i WordPresskoden.<\/p>\n<p>Du kan ocks\u00e5 anv\u00e4nda den h\u00e4r funktionen f\u00f6r att skapa ett nytt anpassat filter genom att ange filternamnet och filterv\u00e4rdet som parametrar.<\/p>\n<pre><code class=\"language-php\">apply_filters( 'filter_name', 'value_to_filter', [argument1], [argument2] );<\/code><\/pre>\n<p>Gl\u00f6m inte att ange ytterligare argument om du vill skicka dem vidare till dina callback-funktioner. De flesta filter anv\u00e4nder bara ett argument, s\u00e5 det \u00e4r l\u00e4tt att g\u00e5 miste om att definiera de andra.<\/p>\n<ul>\n<li><a href=\"https:\/\/codex.wordpress.org\/Function_Reference\/apply_filters_ref_array\">apply_filters_ref_array()<\/a><\/li>\n<\/ul>\n<p>Den h\u00e4r funktionen \u00e4r som <code><strong>apply_filters()<\/strong><\/code> -funktionen, f\u00f6rutom att alla argument som den accepterar \u00e4r kombinerade till en array.<\/p>\n<pre><code class=\"language-php\">\/\/ an example array\n$arguments_array = array( 'some_value', 'foo', false, 'another_value' );\n\napply_filters_ref_array( 'example_filter', $arguments_array );<\/code><\/pre>\n<p>Denna filterfunktion kan vara praktisk n\u00e4r du har m\u00e5nga argument att skicka, eller om alla av dem redan finns i en array. Se till att argumenten i arrayen kommer i r\u00e4tt ordning.<\/p>\n<ul>\n<li><a href=\"https:\/\/codex.wordpress.org\/Function_Reference\/current_filter\">current_filter()<\/a><\/li>\n<\/ul>\n<p>Denna filterfunktion h\u00e4mtar namnet p\u00e5 det aktuella filtret eller \u00e5tg\u00e4rden som k\u00f6rs. Du beh\u00f6ver inte ange n\u00e5gra parametrar eftersom den k\u00f6rs i callback-funktionen.<\/p>\n<p>H\u00e4r \u00e4r ett exempel p\u00e5 hur den kan anv\u00e4ndas:<\/p>\n<pre><code class=\"language-php\">function example_callback() {\n\u00a0 \u00a0 echo current_filter(); \/\/ 'the_title' will be echoed\n\u00a0 \u00a0 return\n}\nadd_filter( 'the_title', 'example_callback' );<\/code><\/pre>\n<p>Trots dess namn kan den h\u00e4r funktionen h\u00e4mta namnet p\u00e5 b\u00e5de \u00e5tg\u00e4rder och filter.<\/p>\n<ul>\n<li><a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/remove_filter\/\">remove_filter()<\/a><\/li>\n<\/ul>\n<p>Denna filterfunktion tar bort callback-funktionen som \u00e4r ansluten till det angivna filtret. Det fungerar precis som funktionen <strong><code>remove_action()<\/code><\/strong>. Du kan anv\u00e4nda den f\u00f6r att ta bort WordPress standardfunktioner som \u00e4r registrerade med ett visst filter, och vid behov ers\u00e4tta dem med dina egna funktioner.<\/p>\n<pre><code class=\"language-php\">remove_filter( 'filter_name', 'function_to_be_removed', [priority] );<\/code><\/pre>\n<p>F\u00f6r att koppla ur en callback-funktion som \u00e4r krokad p\u00e5 ett filter m\u00e5ste parametrarna <strong><code>function_to_be_removed<\/code><\/strong> och <strong><code>priority<\/code><\/strong> vara identiska med argumenten som anv\u00e4nds n\u00e4r callback-funktionen krokas p\u00e5.<\/p>\n<p>Om filtret har lagts till inifr\u00e5n en klass, vilket vanligtvis \u00e4r fallet n\u00e4r de l\u00e4ggs till av plugins, m\u00e5ste du <a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/remove_filter\/#comment-613\" target=\"_blank\" rel=\"noopener noreferrer\">komma \u00e5t klassvariabeln f\u00f6r att ta bort filtret<\/a>.<\/p>\n<pre><code class=\"language-php\">\/\/ access the class variable first, and then remove the filter through it\nglobal $some_class;\n\nremove_filter( 'the_content', array($some_class, 'class_filter_callback') );<\/code><\/pre>\n<p>L\u00e5t oss kolla in ett bra praktiskt exempel p\u00e5 <strong><code>remove_filter()<\/code><\/strong>.<\/p>\n<p><a href=\"https:\/\/kinsta.com\/se\/blog\/e-handelspluginsen-wordpress\/#woocommerce\" target=\"_blank\" rel=\"noopener noreferrer\">WooCommerce<\/a> anv\u00e4nder anropsfunktionen <a href=\"https:\/\/docs.woocommerce.com\/wc-apidocs\/source-function-wc_lostpassword_url.html#13-39\" target=\"_blank\" rel=\"noopener noreferrer\">wc_lostpassword_url()<\/a> som \u00e4r krokad p\u00e5 dess <a href=\"https:\/\/docs.woocommerce.com\/wc-apidocs\/source-function-wc_lostpassword_url.html#41\" target=\"_blank\" rel=\"noopener noreferrer\">lostpassword_url<\/a>-filter f\u00f6r att omdirigera anv\u00e4ndares &#8221;<em>Gl\u00f6mt ditt l\u00f6senord?<\/em>&#8221;-f\u00f6rs\u00f6k.<\/p>\n<p>Det omdirigerar alla anv\u00e4ndare som klickar p\u00e5 den l\u00e4nken till en anpassad frontend-sida med webbadressen <strong><code>\/my-account\/lost-password<\/code><\/strong>. Utan detta filter skulle det ta dem till WordPress standard-inloggningsadressen p\u00e5 <strong><code>\/wp-login.php<\/code><\/strong>.<\/p>\n<p>S\u00e4g att du vill \u00e5terst\u00e4lla den h\u00e4r funktionen och skicka dina anv\u00e4ndare till <a href=\"https:\/\/kinsta.com\/se\/blog\/anda-wordpress-losenord\/\" target=\"_blank\" rel=\"noopener noreferrer\">standardsidan f\u00f6r l\u00f6senords\u00e5terh\u00e4mtning<\/a> eller till en helt separat sida. Du kan ta bort den h\u00e4r callback-funktionen s\u00e5 h\u00e4r:<\/p>\n<pre><code class=\"language-php\">remove_filter( 'lostpassword_url', 'wc_lostpassword_url', 10 );\u00a0<\/code><\/pre>\n<ul>\n<li><a href=\"https:\/\/codex.wordpress.org\/Function_Reference\/remove_all_filters\">remove_all_filters()<\/a><\/li>\n<\/ul>\n<p>Denna filterfunktion tar bort alla callback-funktioner som \u00e4r registrerade i ett filter.<\/p>\n<pre><code class=\"language-php\">remove_all_filters( 'filter_name', [priority] );<\/code><\/pre>\n<p>Det liknar funktionen <code><strong>remove_all_actions()<\/strong><\/code>.<\/p>\n<p>Den popul\u00e4ra pluginet <a href=\"https:\/\/github.com\/KimcoBlogSC\/Blog\/blob\/master\/wp-content\/plugins\/advanced-excerpt\/functions\/functions.php\">Advanced Excerpts<\/a> anv\u00e4nder denna funktion f\u00f6r att ta bort alla standardfunktioner som \u00e4r krokade p\u00e5 filtren <code><strong>the_excerpt<\/strong><\/code> och <code><strong>get_the_excerpt<\/strong><\/code>. Efter det krokar den sedan p\u00e5 sin egen callback-funktion till filtret.<\/p>\n<pre><code class=\"language-php\">\/\/ Ensure our filter is hooked, regardless of the page type \nif ( ! has_filter( 'get_the_excerpt', array( $advanced_excerpt, 'filter_excerpt' ) ) ) {\n    remove_all_filters( 'get_the_excerpt' ); \n    remove_all_filters( 'the_excerpt' ); \n    add_filter( 'get_the_excerpt', array( $advanced_excerpt, 'filter_excerpt' ) );\n}<\/code><\/pre>\n<ul>\n<li><a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/doing_filter\/\">doing_filter()<\/a><\/li>\n<\/ul>\n<p>Denna filterfunktion kontrollerar om det angivna filtret k\u00f6rs f\u00f6r tillf\u00e4llet.<\/p>\n<pre><code class=\"language-php\">if ( doing_filter( 'save_post' ) ) {\n  \u00a0 \/\/ run your code here\n}<\/code><\/pre>\n<p>Det returnerar ett booleskt v\u00e4rde (<b><code>true<\/code><\/b>eller <strong><code>false<\/code><\/strong>).<\/p>\n<p>Du b\u00f6r notera skillnaden mellan den h\u00e4r funktionen och funktionen <strong><code>current_filter()<\/code><\/strong>, som returnerar namnet p\u00e5 filtret eller \u00e5tg\u00e4rden som k\u00f6rs (en str\u00e4ng).<\/p>\n<h4>Filterexempel 1: L\u00e4gg till ett svordomsfilter f\u00f6r kommentarer<\/h4>\n<p>Att hantera alla <a href=\"https:\/\/kinsta.com\/se\/blog\/wordpress-kommentar-pluginsen\/\" target=\"_blank\" rel=\"noopener noreferrer\">kommentarer p\u00e5 din WordPresswebbplats<\/a> kan vara besv\u00e4rligt. Med <a href=\"https:\/\/developer.wordpress.org\/reference\/hooks\/comment_text\/\" target=\"_blank\" rel=\"noopener noreferrer\">comment_text<\/a>-filtret kan du st\u00e4lla in regler f\u00f6r att \u00e4ndra kommentarerna innan de skrivs ut p\u00e5 sk\u00e4rmen.<\/p>\n<figure id=\"attachment_72268\" aria-describedby=\"caption-attachment-72268\" style=\"width: 1100px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-72268 size-full\" src=\"https:\/\/kinsta.com\/se\/wp-content\/uploads\/sites\/9\/2020\/09\/ofiltrerade-kommentarer-med-svordomar-markerade.png\" alt=\"Ofiltrerade kommentarer med svordomar markerade\" width=\"1100\" height=\"563\"><figcaption id=\"caption-attachment-72268\" class=\"wp-caption-text\">Ofiltrerade kommentarer med svordomar markerade<\/figcaption><\/figure>\n<p>Du kan dirigera WordPress att ta bort eventuella svordomar automatiskt innan de visas f\u00f6r dina bes\u00f6kare. Nu s\u00e4tter vi ig\u00e5ng.<\/p>\n<pre><code class=\"language-php\">\/\/ hook into the 'comment_text' filter with the callback function\nadd_filter( 'comment_text', 'the_profanity_filter' );\n\n\/\/ define a callback function to filter profanities in comments \nfunction the_profanity_filter( $comment_text ) {\n    \/\/ define an array of profane words and count how many are there \n    $profaneWords = array('fudge', 'darn', 'pickles', 'blows', 'dangit');\n    $profaneWordsCount = sizeof($profaneWords);\n    \n    \/\/ loop through the profanities in $comment_text and replace them with '*'\n    for($i=0; $i &lt; $profaneWordsCount; $i++) {\n        $comment_text = str_ireplace( $profaneWords[$i], str_repeat('*', strlen( $profaneWords[$i]) ), $comment_text );\n    } \n    \n    return $comment_text;\n}<\/code><\/pre>\n<p>Det h\u00e4r \u00e4r koden, rad f\u00f6r rad:<\/p>\n<ul>\n<li><a href=\"https:\/\/developer.wordpress.org\/reference\/hooks\/comment_text\/\" target=\"_blank\" rel=\"noopener noreferrer\">comment_text<\/a> \u00e4r en filterkrok som l\u00e5ter dig \u00e4ndra texten i en kommentar innan webbl\u00e4saren visar den. Du kan registrera din callback-funktion med den f\u00f6r att filtrera dess utg\u00e5ng.<\/li>\n<li>Funktionen <strong><code>add_filter()<\/code><\/strong> l\u00e5ter dig kroka p\u00e5 <strong><code>comment_text<\/code><\/strong>-filtret och bifoga en callback-funktion.<\/li>\n<li><strong><code>the_profanity_filter()<\/code><\/strong> \u00e4r namnet p\u00e5 callback-funktionen. Den accepterar endast en parameter, en str\u00e4ng som inneh\u00e5ller kommentartexten. Definiera den h\u00e4r anpassade funktionen med l\u00e4mplig kodlogik.<\/li>\n<li>Lagra alla fula ord i en PHP-array som heter <strong><code>profaneWords<\/code><\/strong>. Du kan l\u00e4gga till s\u00e5 m\u00e5nga ord du vill till denna array. Jag lagrar storleken p\u00e5 denna array i <strong><code>profaneWordsCount<\/code><\/strong>-variabeln med hj\u00e4lp av <a href=\"https:\/\/www.php.net\/manual\/en\/function.sizeof.php\" target=\"_blank\" rel=\"noopener noreferrer\">PHP-funktionen sizeof()<\/a>.<\/li>\n<li>Det loopar igenom alla fula ord och anv\u00e4nder PHP:s standardfunktion <a href=\"https:\/\/www.php.net\/manual\/en\/function.str-ireplace.php\" target=\"_blank\" rel=\"noopener noreferrer\">str_ireplace()<\/a> f\u00f6r att ers\u00e4tta n\u00e5gon av de matchande svordomarna med <strong><code>*<\/code><\/strong>-symboler. Eftersom str\u00e4ngutbytesfunktionen inte \u00e4r k\u00e4nslig f\u00f6r versaler och gemener beh\u00f6ver du inte oroa dig \u00f6ver stora bokst\u00e4ver. Kolla in olika s\u00e4tt att utf\u00f6ra en <a href=\"https:\/\/kinsta.com\/blog\/wordpress-search-and-replace\/\">s\u00f6kning och ers\u00e4ttning<\/a>.<\/li>\n<li>Anv\u00e4nd <strong><code>return<\/code><\/strong> f\u00f6r att mata ut den filtrerade kommentartexten.<\/li>\n<\/ul>\n<p>Spara \u00e4ndringarna i din anpassade plugin-fil och ladda om alla inl\u00e4gg med kommentarer. Alla ord du har inkluderat i <strong><code>profanewords<\/code><\/strong>-arrayen b\u00f6r nu vara ersatta med <strong>*<\/strong>-symboler.<\/p>\n<figure id=\"attachment_72256\" aria-describedby=\"caption-attachment-72256\" style=\"width: 1100px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-72256 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2020\/05\/Filtered-Comments-with-Profanities-Censored.png\" alt=\"Censurera svordomar i kommentarer med *-symboler\" width=\"1100\" height=\"563\" data-must_clone=\"true\"><figcaption id=\"caption-attachment-72256\" class=\"wp-caption-text\">Censurera svordomar i kommentarer med *-symboler<\/figcaption><\/figure>\n<p>De ursprungliga kommentarerna kommer fortfarande att vara tillg\u00e4ngliga som de \u00e4r i databasen. Detta filter \u00e4ndrar bara kommentartexten innan den matas ut till frontenden.<\/p>\n<figure id=\"attachment_72263\" aria-describedby=\"caption-attachment-72263\" style=\"width: 1100px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-72263 size-full\" src=\"https:\/\/kinsta.com\/se\/wp-content\/uploads\/sites\/9\/2020\/09\/ursprungliga-kommentaren-pa-webbplatsens-backend.png\" alt=\"Den ursprungliga kommentaren p\u00e5 webbplatsens backend\" width=\"1100\" height=\"498\"><figcaption id=\"caption-attachment-72263\" class=\"wp-caption-text\">Den ursprungliga kommentaren p\u00e5 webbplatsens backend<\/figcaption><\/figure>\n<p>N\u00e4r du \u00e4r krokad p\u00e5 r\u00e4tt filter kan du g\u00f6ra en hel del coola grejer med det.<\/p>\n<p>Till exempel kan du ocks\u00e5 anv\u00e4nda <strong><code>comment_text<\/code><\/strong>-filtret f\u00f6r att ta bort eventuella webbadresser fr\u00e5n alla kommentarer (se till att l\u00e4sa den h\u00e4r djupg\u00e5ende guiden om <a href=\"https:\/\/kinsta.com\/se\/blog\/wordpress-spam-kommentarer\/\" target=\"_blank\" rel=\"noopener noreferrer\">hur du stoppar spamkommentarer i WordPress<\/a>).<\/p>\n<p>Eller s\u00e5 kan du kroka p\u00e5 <a href=\"https:\/\/developer.wordpress.org\/reference\/hooks\/pre_comment_approved\/\" target=\"_blank\" rel=\"noopener noreferrer\">pre_comment_approved<\/a>-filtret, och markera kommentarer som godk\u00e4nda, spam, eller skr\u00e4p, baserat p\u00e5 f\u00f6rdefinierade kriterier.<\/p>\n<h4>Filterexempel 2: infoga inneh\u00e5ll efter ett inl\u00e4gg<\/h4>\n<p>Du har redan sett hur WordPress anv\u00e4nder <code><strong>the_content<\/strong><\/code>-filtret f\u00f6r att \u00e4ndra inl\u00e4gg eller sidinneh\u00e5ll. L\u00e5t oss anv\u00e4nda samma filter f\u00f6r att l\u00e4gga till n\u00e5got i slutet av varje inl\u00e4gg.<\/p>\n<pre><code class=\"language-php\">\/\/ hook into 'the_content' filter with a callback function\nadd_filter( 'the_content', 'insert_content_below' );\n\n\/\/ define the callback function to insert something below the post\nfunction insert_content_below( $content ) {\n    \/\/ check to see if we're inside the main loop in a single post\n    if ( is_single() && in_the_loop() && is_main_query() ) {\n  \u00a0     return $content . \"&lt;h3 style=\\\"text-align: center;\\\"&gt;Let me insert myself here&lt;\/h3&gt;&lt;p style=\\\"text-align: center;border: 3px solid #5333ed;\\\"&gt;I'll appear after the post. You can insert anything here. Even HTML. Headers, links, images, scripts, I'll take them all and append it to the end of the post content. You can also give me a class, so you can style me easily with CSS style sheets.&lt;\/p&gt;\" ;\n    } \n    \n    return $content;\n}<\/code><\/pre>\n<p>F\u00f6rst\u00e5 kodlogiken i exemplet ovan:<\/p>\n<ul>\n<li>Filterkroken <strong><code>the_content<\/code><\/strong> hj\u00e4lper dig att ta tag i inneh\u00e5llet i det aktuella inl\u00e4gget och anpassa det.<\/li>\n<li>Anv\u00e4nd funktionen <strong><code>add_filter()<\/code><\/strong> f\u00f6r att kroka p\u00e5 <strong><code>the_content-<\/code><\/strong>filtret med callback-funktionen <strong><code>insert_content_below()<\/code><\/strong>.<\/li>\n<li>Definiera callback-funktionen genom att skicka det aktuella inl\u00e4ggets inneh\u00e5ll som en parameter (<strong><code>$content<\/code><\/strong>).<\/li>\n<li>I callback-funktionen kontrollerar du att du bara filtrerar inneh\u00e5llet i huvudf\u00f6rfr\u00e5gningen, vilket i detta fall \u00e4r inneh\u00e5llet i inl\u00e4gget. Om du inte verifierar detta, kommer koden ibland oavsiktligt att filtrera inneh\u00e5ll fr\u00e5n andra platser som sidof\u00e4lt och footers.<\/li>\n<li><a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/is_main_query\/\" target=\"_blank\" rel=\"noopener noreferrer\">is_main_query()<\/a> och <a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/in_the_loop\/#comment-1364\" target=\"_blank\" rel=\"noopener noreferrer\">in_the_loop()<\/a>-villkoren avg\u00f6r om f\u00f6rfr\u00e5gningen \u00e4r en huvudf\u00f6rfr\u00e5gan och sker inom WordPress-loopen.<\/li>\n<li><a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/is_single\/\" target=\"_blank\" rel=\"noopener noreferrer\">is_single()<\/a>-villkoret kontrollerar om f\u00f6rfr\u00e5gningen \u00e4r till f\u00f6r ett enda inl\u00e4gg.<\/li>\n<li>Anv\u00e4nd PHPs <a href=\"https:\/\/www.php.net\/manual\/en\/language.operators.string.php\" target=\"_blank\" rel=\"noopener noreferrer\">string concatenation operator<\/a> (<strong><code>$content.\"dina till\u00e4gg\"<\/code><\/strong>) f\u00f6r att l\u00e4gga till extra saker i sidinneh\u00e5llet.<\/li>\n<li><strong><code>return<\/code><\/strong> den filtrerade kommentaren om alla ovanst\u00e5ende villkor uppn\u00e5s. Om det inte g\u00f6r det, returnera bara inneh\u00e5llet utan \u00e4ndringar.<\/li>\n<\/ul>\n<p>Spara din pluginfil, ladda ett inl\u00e4gg p\u00e5 din webbplats och bl\u00e4ddra ner till slutet.<\/p>\n<figure id=\"attachment_72261\" aria-describedby=\"caption-attachment-72261\" style=\"width: 1100px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-72261 size-full\" src=\"https:\/\/kinsta.com\/se\/wp-content\/uploads\/sites\/9\/2020\/09\/infoga-nagot-i-slutet-av-inaggets-innehall.png\" alt=\"Infoga n\u00e5got i slutet av inl\u00e4ggets inneh\u00e5ll\" width=\"1100\" height=\"491\"><figcaption id=\"caption-attachment-72261\" class=\"wp-caption-text\">Infoga n\u00e5got i slutet av inl\u00e4ggets inneh\u00e5ll<\/figcaption><\/figure>\n<p>Du kan anv\u00e4nda samma logik f\u00f6r att l\u00e4gga till n\u00e5got i b\u00f6rjan av alla dina inl\u00e4gg genom att v\u00e4nda str\u00e4ngkonkateneringsparametrarnas position (<code><strong>\u201cyour additions\u201d . $content<\/strong><\/code>).<\/p>\n<h3>Anpassa WordPress-inloggningssidan med krokar<\/h3>\n<p>L\u00e5t oss anv\u00e4nda b\u00e5de \u00e5tg\u00e4rder och filter f\u00f6r att anpassa <a href=\"https:\/\/kinsta.com\/se\/blog\/wordpress-inloggningsadress\/\" target=\"_blank\" rel=\"noopener noreferrer\">WordPress standardinloggningssida<\/a>. Jag skapar ett nytt plugin som heter <strong>Sal Custom Login Page<\/strong> f\u00f6r att g\u00f6ra detta. Du hittar den fullst\u00e4ndiga k\u00e4llkoden f\u00f6r detta plugin i slutet av detta avsnitt.<\/p>\n<figure id=\"attachment_72243\" aria-describedby=\"caption-attachment-72243\" style=\"width: 1110px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-72243 size-full\" src=\"https:\/\/kinsta.com\/se\/wp-content\/uploads\/sites\/9\/2020\/09\/den-slutliga-anpassade-wordpress-inloggningsskarmen.jpg\" alt=\"Den slutliga anpassade WordPress-inloggningssk\u00e4rmen\" width=\"1110\" height=\"700\"><figcaption id=\"caption-attachment-72243\" class=\"wp-caption-text\">Den slutliga anpassade WordPress-inloggningssk\u00e4rmen<\/figcaption><\/figure>\n<p>L\u00e5t oss komma ig\u00e5ng genom att l\u00e4gga till ett plugins standard-headerf\u00e4lt och registrera det med WordPress.<\/p>\n<pre><code class=\"language-php\">&lt;?php\n\n\/*\nPlugin Name:  Sal Custom Login Page\nVersion:  1.0\nDescription:  Demonstrating WordPress Hooks (Actions and Filters) by customizing the WordPress login page.\nAuthor:  Salman Ravoof\nAuthor URI:  https:\/\/www.salmanravoof.com\/License: GPLv2 or later\nLicense URI: https:\/\/www.gnu.org\/licenses\/gpl-2.0.html\nText Domain:  sal-custom-login-page\n*\/\n\n\/\/ enqueueing the custom style sheet on WordPress login page\nadd_action( 'login_enqueue_scripts', 'salhooks_login_stylesheet');\nfunction salhooks_login_stylesheet() {\n    \/\/ Load the style sheet from the plugin folder\n    wp_enqueue_style( 'sal-custom-login-page', plugin_dir_url( __FILE__ ).'sal-custom-login-page-styles.css' );\n}<\/code><\/pre>\n<p>F\u00f6rst krokar du p\u00e5 <a href=\"https:\/\/developer.wordpress.org\/reference\/hooks\/login_enqueue_scripts\/\" target=\"_blank\" rel=\"noopener noreferrer\">login_enque_scripts<\/a>-\u00e5tg\u00e4rden f\u00f6r att k\u00f6a din anpassade formatmall. Alla skript eller format du k\u00f6ar h\u00e4r ing\u00e5r i din inloggningssidas header.<\/p>\n<p>Om du vill ladda egna skript och formatmallar p\u00e5 din webbplats frontend (snarare \u00e4n p\u00e5 admin-backenden eller inloggningsomr\u00e5det) m\u00e5ste du kroka p\u00e5 <strong><code>wp_enqueue_scripts<\/code><\/strong>-\u00e5tg\u00e4rden. Du kan l\u00e4sa mer om det i <a href=\"https:\/\/developer.wordpress.org\/reference\/hooks\/wp_enqueue_scripts\/\" target=\"_blank\" rel=\"noopener noreferrer\">WordPress Codex<\/a> och <a href=\"https:\/\/kinsta.com\/blog\/wp-enqueue-scripts\/\" target=\"_blank\" rel=\"noopener noreferrer\">Kinstas artikel om hur du anv\u00e4nder wp_enqueue_scripts<\/a>.<\/p>\n<p>Inuti callback-funktionen <strong><code>salhooks_login_stylesheet()<\/code><\/strong> anv\u00e4nder du funktionen <a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/wp_enqueue_style\/\">wp_enqueue_style()<\/a> f\u00f6r att ladda den anpassade formatmallen (<strong><code>sal-custom-login-page-styles.css<\/code><\/strong>) som finns i samma pluginkatalog. WordPress inbyggda <a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/plugin_dir_url\/\" target=\"_blank\" rel=\"noopener noreferrer\">plugin_dir_url (__FILE__)<\/a>-funktion g\u00f6r det enkelt att f\u00e5 URL-s\u00f6kv\u00e4gen (med ett avslutande snedstreck) f\u00f6r den aktuella pluginkatalogen.<\/p>\n<p>Jag kommer inte att f\u00f6rklara de <a href=\"https:\/\/kinsta.com\/se\/blog\/wordpress-css\/#wordpress-and-css\" target=\"_blank\" rel=\"noopener noreferrer\">CSS-stilar<\/a> vi anv\u00e4nt h\u00e4r, men du kan se dem i k\u00e4llkoden i slutet av detta avsnitt.<\/p>\n<pre><code class=\"language-php\">\/\/ Custom login ERROR message to keep the site more secure\nadd_filter( 'login_errors', 'salhooks_remove_login_errors', 10 );\nfunction salhooks_remove_login_errors() {\n    return 'Incorrect credentials. Please try again!';\n}<\/code><\/pre>\n<p>Kroka sedan p\u00e5 <a href=\"https:\/\/developer.wordpress.org\/reference\/hooks\/login_errors\/\" target=\"_blank\" rel=\"noopener noreferrer\">login_errors<\/a>-filtret f\u00f6r att \u00e4ndra felmeddelandet som visas n\u00e4r n\u00e5gon anger felaktiga uppgifter. Filtrering av felmeddelandet blockerar angripare fr\u00e5n att enkelt gissa ditt anv\u00e4ndarnamn.<\/p>\n<pre><code class=\"language-php\">\/\/ Remove the login form box shake animation for incorrect credentials\nadd_action( 'login_head', 'remove_login_error_shake' );\nfunction remove_login_error_shake() {\n    remove_action( 'login_head', 'wp_shake_js', 12 );\n}<\/code><\/pre>\n<p>Varje g\u00e5ng n\u00e5gon anger felaktiga inloggningsuppgifter, skakar inloggningsformul\u00e4ret aggressivt. Detta \u00e4r ett valfritt steg, men jag har inkluderat det f\u00f6r att visa att du ocks\u00e5 kan ta bort vissa funktioner fr\u00e5n inloggningssidan.<\/p>\n<p>Du l\u00e4r dig mer om funktionerna <code><strong>remove_action()<\/strong><\/code> och <code><strong>remove_filter()<\/strong><\/code>i det sista avsnittet i den h\u00e4r artikeln.<\/p>\n<pre><code class=\"language-php\">\/\/ Change the logo and header link above the login form\nadd_filter( 'login_headerurl', 'salhooks_login_headerurl');\nfunction salhooks_login_headerurl( $url ) {\n    $url = 'https:\/\/salmanravoof.com';\n    return $url;\n}\n\nadd_filter( 'login_headertext', 'salhooks_login_headertext');\nfunction salhooks_login_headertext( $text ) {\n    $text = 'Salman Ravoof';\n    return $text;\n}<\/code><\/pre>\n<p>Det sista steget \u00e4r att \u00e4ndra inloggningsrubrikens URL och text. Du kan kroka p\u00e5 <a href=\"https:\/\/developer.wordpress.org\/reference\/hooks\/login_headerurl\/\" target=\"_blank\" rel=\"noopener noreferrer\">login_headerurl<\/a> och <a href=\"https:\/\/developer.wordpress.org\/reference\/hooks\/login_headertext\/\" target=\"_blank\" rel=\"noopener noreferrer\">login_headertext<\/a>-filtren f\u00f6r att \u00e4ndra dem b\u00e5da tv\u00e5.<\/p>\n<p>Om du vill bygga vidare p\u00e5 detta plugin och experimentera vidare kan du <a href=\"https:\/\/github.com\/SalmanRavoof\/sal-custom-login-page\" target=\"_blank\" rel=\"noopener noreferrer\">ladda ner pluginets k\u00e4llkod<\/a> och komma ig\u00e5ng.<\/p>\n<h2>Lista och resurser f\u00f6r WordPresskrokar<\/h2>\n<p>Det \u00e4r sv\u00e5rt att memorera alla de olika krokarna som WordPress har. Det finns tusentals inbyggda \u00e5tg\u00e4rder och filter att kroka p\u00e5. D\u00e4rf\u00f6r kan det ibland k\u00e4nnas som en skattjakt att hitta en l\u00e4mplig krok.<\/p>\n<p>Tack och lov finns det olika resurser som du kan anv\u00e4nda f\u00f6r att identifiera den perfekta kroken f\u00f6r dina behov.<\/p>\n<ul>\n<li><a href=\"https:\/\/developer.wordpress.org\/plugins\/hooks\/\" target=\"_blank\" rel=\"noopener noreferrer\">WordPress Pluginhandbok &#8211; Krokar<\/a><\/li>\n<\/ul>\n<p>Den f\u00f6rsta platsen att bekanta sig med krokar \u00e4r WordPress Codex, s\u00e4rskilt dess krokavsnitt i Pluginhandboken. H\u00e4r hittar du viktig information om krokar och l\u00e4nkar f\u00f6r till komplett dokumentation om alla \u00e5tg\u00e4rder och filter.<\/p>\n<figure id=\"attachment_72272\" aria-describedby=\"caption-attachment-72272\" style=\"width: 1100px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-72272 size-full\" src=\"https:\/\/kinsta.com\/se\/wp-content\/uploads\/sites\/9\/2020\/09\/krokar-i-wordpress-pluginhandbok.png\" alt=\"B\u00f6rja l\u00e4ra dig om krokar med WordPress Pluginhandbok\" width=\"1100\" height=\"539\"><figcaption id=\"caption-attachment-72272\" class=\"wp-caption-text\">B\u00f6rja l\u00e4ra dig om krokar med WordPress Pluginhandbok<\/figcaption><\/figure>\n<p>Bokm\u00e4rk dessa anv\u00e4ndbara l\u00e4nkar fr\u00e5n Pluginhandboken f\u00f6r att p\u00e5skynda din s\u00f6kning:<\/p>\n<ul>\n<li><a href=\"https:\/\/codex.wordpress.org\/Plugin_API#Function_Reference\" target=\"_blank\" rel=\"noopener noreferrer\">Plugin API \u2014 Hooks Function Reference<\/a><\/li>\n<li><a href=\"https:\/\/codex.wordpress.org\/Plugin_API\/Action_Reference\" target=\"_blank\" rel=\"noopener noreferrer\">Plugin API \u2014 Action Reference<\/a><\/li>\n<li><a href=\"https:\/\/codex.wordpress.org\/Plugin_API\/Filter_Reference\" target=\"_blank\" rel=\"noopener noreferrer\">Plugin API \u2013 Filterreferens<\/a><\/li>\n<\/ul>\n<p>B\u00e5de \u00e5tg\u00e4rdsreferens- och filterreferenssidorna ger dig en lista \u00f6ver alla krokar som vanligtvis k\u00f6rs under en specifik WordPress-f\u00f6rfr\u00e5gan.<\/p>\n<p>Du kan till exempel hitta alla krokar som avfyras n\u00e4r du \u00f6ppnar en administrat\u00f6rssida, n\u00e4r du har att g\u00f6ra med inl\u00e4ggsbilagor eller med <a href=\"https:\/\/kinsta.com\/blog\/what-is-taxonomy\/\" target=\"_blank\" rel=\"noopener noreferrer\">kategorier<\/a>.<\/p>\n<ul>\n<li><a href=\"https:\/\/developer.wordpress.org\/reference\/\" target=\"_blank\" rel=\"noopener noreferrer\">WordPresskodreferenser<\/a><\/li>\n<\/ul>\n<p>WordPress Codex inneh\u00e5ller ocks\u00e5 ett praktiskt s\u00f6kverktyg f\u00f6r att hitta alla dess funktioner, krokar, metoder och klasser. Denna sida listar ocks\u00e5 nya och uppdaterade komponenter i den senaste versionen av WordPress. G\u00e5 hit f\u00f6rst om du vill f\u00e5 reda p\u00e5 vad som h\u00e4nder inuti WordPress.<\/p>\n<figure id=\"attachment_72271\" aria-describedby=\"caption-attachment-72271\" style=\"width: 1100px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-72271 size-full\" src=\"https:\/\/kinsta.com\/se\/wp-content\/uploads\/sites\/9\/2020\/09\/sok-efter-vad-som-helst-i-wordpress-har.png\" alt=\"S\u00f6k efter vad som helst i WordPress h\u00e4r\" width=\"1100\" height=\"381\"><figcaption id=\"caption-attachment-72271\" class=\"wp-caption-text\">S\u00f6k efter vad som helst i WordPress h\u00e4r<\/figcaption><\/figure>\n<ul>\n<li><a href=\"https:\/\/adambrown.info\/p\/wp_hooks\/hook\" target=\"_blank\" rel=\"noopener noreferrer\">Adam R Browns Index \u00f6ver WordPresskrokar<\/a><\/li>\n<\/ul>\n<p>Detta index \u00f6ver WordPresskrokar sorterar alla krokar efter typ, WordPress-versionen de kom i, och om de \u00e4r avvecklade.<\/p>\n<figure id=\"attachment_72248\" aria-describedby=\"caption-attachment-72248\" style=\"width: 1100px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-72248\" src=\"https:\/\/kinsta.com\/se\/wp-content\/uploads\/sites\/9\/2020\/09\/adam-r-browns-index-over-wordpresskrokar.png\" alt=\"Adam R Brown's WordPress Hooks Index\" width=\"1100\" height=\"363\"><figcaption id=\"caption-attachment-72248\" class=\"wp-caption-text\">Adam R Brown\u2019s WordPress Hooks Index<\/figcaption><\/figure>\n<p>Att sortera krokarna i ordning efter n\u00e4r de introducerades kommer att visa dig att de \u00e4ldsta WordPresskrokarna fortfarande \u00e4r de mest anv\u00e4nda. Om du \u00e4r <a href=\"https:\/\/kinsta.com\/se\/blog\/php-tutorials\/\" target=\"_blank\" rel=\"noopener noreferrer\">ny inom WordPressutveckling<\/a> \u00e4r det smart att bekanta sig med dessa popul\u00e4ra \u00e5tg\u00e4rder och filter, eftersom det \u00e4r det snabbaste s\u00e4ttet att komma ikapp.<\/p>\n<p>\u00c4ven om detta index inte har uppdaterats sedan WordPress 5.1, \u00e4r det fortfarande bra att skumma igenom alla de viktigare krokarna.<\/p>\n<p>\u00c4r det fortfarande sv\u00e5rt att hitta kroken du vill ha? En onlines\u00f6kning med r\u00e4tt s\u00f6kord \u00e4r alltid ett bra s\u00e4tt att b\u00f6rja. Om allt annat misslyckas kan du alltid gr\u00e4va i WordPresskoden.<\/p>\n<h2>Hitta krokar registrerade p\u00e5 en WordPress-sida<\/h2>\n<p>Som vi har sett har WordPress massor av tillg\u00e4ngliga krokar, men inte varje krok avfyras p\u00e5 varje sida. Om du kan hitta vilka \u00e5tg\u00e4rder och filter du kan kroka p\u00e5 en viss sida, \u00e4r halva slaget vunnet.<\/p>\n<p>Medan du kan anv\u00e4nda avancerade PHP-fels\u00f6kningsverktyg som <a href=\"https:\/\/xdebug.org\/\" target=\"_blank\" rel=\"noopener noreferrer\">xdebug<\/a> och <a href=\"https:\/\/github.com\/squizlabs\/PHP_CodeSniffer\">PHPCS<\/a> f\u00f6r att hj\u00e4lpa till med detta, finns det enklare utvecklingsverktyg som Debug Bar och Query Monitor som du kan k\u00f6ra i WordPress.<\/p>\n<h3>Debug Bar med till\u00e4gget Actions and Filters<\/h3>\n<p><a href=\"https:\/\/wordpress.org\/plugins\/debug-bar\/\" target=\"_blank\" rel=\"noopener noreferrer\">Debug Bar<\/a> \u00e4r ett officiellt WordPressplugin som l\u00e4gger till en <strong>fels\u00f6kningsmeny<\/strong> till ditt adminf\u00e4lt. Det visar PHP-varningar och meddelanden, cachef\u00f6rfr\u00e5gningar, <a href=\"https:\/\/kinsta.com\/se\/blog\/vad-ar-mysql\/\" target=\"_blank\" rel=\"noopener noreferrer\">MySQL-f\u00f6rfr\u00e5gningar<\/a> och <a href=\"https:\/\/kinsta.com\/se\/blog\/wordpress-debug\/\" target=\"_blank\" rel=\"noopener noreferrer\">annan anv\u00e4ndbar fels\u00f6kningsinformation<\/a>.<\/p>\n<aside role=\"note\" class=\"wp-block-kinsta-notice is-style-info\">\n            <h3>Info<\/h3>\n        <p>Detta plugin har inte uppdaterats nyligen, eller testats med de senaste st\u00f6rre WordPressversionerna. Vi n\u00e4mner det som ett praktiskt plugin f\u00f6r att l\u00e4ra sig mer om WordPresskrokar. Anv\u00e4nd det p\u00e5 en <a href=\"https:\/\/kinsta.com\/docs\/wordpress-hosting\/staging-environment\/\" target=\"_blank\" rel=\"noopener noreferrer\">stagingmilj\u00f6<\/a>.<\/p>\n<\/aside>\n\n<figure id=\"attachment_72542\" aria-describedby=\"caption-attachment-72542\" style=\"width: 1500px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/kinsta.com\/se\/wp-content\/uploads\/sites\/9\/2020\/09\/wordpresspluginet-wordpress-debug-bar.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-72542 size-full\" src=\"https:\/\/kinsta.com\/se\/wp-content\/uploads\/sites\/9\/2020\/09\/debug-bar.jpg\" alt=\"WordPresspluginet WordPress Debug Bar\" width=\"1500\" height=\"500\"><\/a><figcaption id=\"caption-attachment-72542\" class=\"wp-caption-text\">WordPresspluginet WordPress Debug Bar<\/figcaption><\/figure>\n<p>N\u00e4r du har installerat pluginet m\u00e5ste du l\u00e4gga till kodavsnittet nedan till din webbplats <strong><code>wp-config.php<\/code><\/strong>-fil f\u00f6r att aktivera dess fels\u00f6kningsfunktioner.<\/p>\n<pre><code class=\"language-php\">define( 'WP_DEBUG', true ); \/\/ tracks PHP Warnings and Notices\ndefine( 'SAVEQUERIES', true ); \/\/ tracks and displays MySQL queries<\/code><\/pre>\n<p>Du b\u00f6r nu se <strong>Debug<\/strong>-menyalternativet dyka upp i administrat\u00f6rsf\u00e4ltet. Genom att klicka p\u00e5 det tar du dig till dess instrumentpanel d\u00e4r du kan se olika f\u00f6rfr\u00e5gningar och cachar som \u00e4r kopplade till sidan du anv\u00e4nde f\u00f6r att komma \u00e5t den.<\/p>\n<figure id=\"attachment_72273\" aria-describedby=\"caption-attachment-72273\" style=\"width: 1100px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-72273 size-full\" src=\"https:\/\/kinsta.com\/se\/wp-content\/uploads\/sites\/9\/2020\/09\/menyn-debug-i-wordpress-adminfalt.png\" alt=\"Menyn \"Debug\" i WordPress adminf\u00e4lt\" width=\"1100\" height=\"363\"><figcaption id=\"caption-attachment-72273\" class=\"wp-caption-text\">Menyn &#8221;Debug&#8221; i WordPress adminf\u00e4lt<\/figcaption><\/figure>\n<p>D\u00e4refter m\u00e5ste du installera pluginet <a href=\"https:\/\/wordpress.org\/plugins\/debug-bar-actions-and-filters-addon\/\" target=\"_blank\" rel=\"noopener noreferrer\">Debug Bar Actions and Filters Addon<\/a>. Det \u00e4r ett praktiskt till\u00e4gg som l\u00e4gger till ytterligare tv\u00e5 flikar i Debug Bar-panelen f\u00f6r att visa \u00e5tg\u00e4rder och filter som utl\u00f6stes vid den aktuella beg\u00e4ran.<\/p>\n<figure id=\"attachment_72253\" aria-describedby=\"caption-attachment-72253\" style=\"width: 1100px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-72253 size-full\" src=\"https:\/\/kinsta.com\/se\/wp-content\/uploads\/sites\/9\/2020\/09\/atgarder-listade-i-laddningsordning-for-den-aktuella-sidan.png\" alt=\"\u00c5tg\u00e4rder listade i laddningsordning f\u00f6r den aktuella sidan\" width=\"1100\" height=\"491\"><figcaption id=\"caption-attachment-72253\" class=\"wp-caption-text\">\u00c5tg\u00e4rder listade i laddningsordning f\u00f6r den aktuella sidan<\/figcaption><\/figure>\n<p>Det kommer ocks\u00e5 att lista alla funktioner som \u00e4r krokade p\u00e5 dem, med deras prioritet.<\/p>\n<figure id=\"attachment_72254\" aria-describedby=\"caption-attachment-72254\" style=\"width: 1100px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-72254 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2020\/05\/Debug-Bar-with-Actions-and-Filters-Addon-Filters-Panel.png\" alt=\"Filter listade med prioritet och registrerade callback-funktioner\" width=\"1100\" height=\"509\" data-must_clone=\"true\"><figcaption id=\"caption-attachment-72254\" class=\"wp-caption-text\">Filter listade med prioritet och registrerade callback-funktioner<\/figcaption><\/figure>\n<p>Du kan klicka p\u00e5 <strong>Debug<\/strong>-menyn fr\u00e5n vilken sida som helst p\u00e5 din webbplats f\u00f6r att f\u00e5 veta alla \u00e5tg\u00e4rder och filter som du kan kroka p\u00e5 den sidan.<\/p>\n<h3>Query Monitor<\/h3>\n<p><a href=\"https:\/\/kinsta.com\/blog\/query-monitor\/\" target=\"_blank\" rel=\"noopener noreferrer\">Query Monitor<\/a> \u00e4r en kraftfull utvecklarverktygspanel f\u00f6r WordPress. Du kan anv\u00e4nda den f\u00f6r att gr\u00e4va ner dig i krokarna som finns p\u00e5 en sida, inklusive deras laddningsordning.<\/p>\n<figure id=\"attachment_72543\" aria-describedby=\"caption-attachment-72543\" style=\"width: 1500px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/kinsta.com\/se\/wp-content\/uploads\/sites\/9\/2020\/09\/query-monitor.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-72543 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2020\/05\/Query-Monitor-plugin.jpg\" alt=\"WordPresspluginet Query Monitor\" width=\"1500\" height=\"500\" data-must_clone=\"true\"><\/a><figcaption id=\"caption-attachment-72543\" class=\"wp-caption-text\">WordPresspluginet Query Monitor<\/figcaption><\/figure>\n<p>Till skillnad fr\u00e5n Debug Bar beh\u00f6ver du inte installera n\u00e5gra till\u00e4gg f\u00f6r att se de \u00e5tg\u00e4rder och filter som utl\u00f6ses p\u00e5 en viss sida.<\/p>\n<figure id=\"attachment_72267\" aria-describedby=\"caption-attachment-72267\" style=\"width: 1100px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-72267 size-full\" src=\"https:\/\/kinsta.com\/se\/wp-content\/uploads\/sites\/9\/2020\/09\/query-monitor-i-administratorsfaltet.png\" alt=\"Du kan komma \u00e5t Query Monitor fr\u00e5n administrat\u00f6rsf\u00e4ltet\" width=\"1100\" height=\"438\"><figcaption id=\"caption-attachment-72267\" class=\"wp-caption-text\">Du kan komma \u00e5t Query Monitor fr\u00e5n administrat\u00f6rsf\u00e4ltet<\/figcaption><\/figure>\n<p>Query Monitor ger dig ocks\u00e5 mer information om exakt varifr\u00e5n en krok avfyras.<\/p>\n<figure id=\"attachment_72266\" aria-describedby=\"caption-attachment-72266\" style=\"width: 1100px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-72266 size-full\" src=\"https:\/\/kinsta.com\/se\/wp-content\/uploads\/sites\/9\/2020\/09\/krokar-atgardspanelen-i-query-monitor.png\" alt=\"Krokar &#038; \u00c5tg\u00e4rdspanelen i Query Monitor\" width=\"1100\" height=\"642\"><figcaption id=\"caption-attachment-72266\" class=\"wp-caption-text\">Krokar &#038; \u00c5tg\u00e4rdspanelen i Query Monitor<\/figcaption><\/figure>\n<p>I komponentkolumnen kan du se att de flesta krokarna \u00e4r registrerade fr\u00e5n k\u00e4rnan. Men vissa krokar \u00e4r registrerade fr\u00e5n ett tema eller plugin. N\u00e5gra krokar kan vara registrerade fr\u00e5n mer \u00e4n en komponent.<\/p>\n<p>Du kan anv\u00e4nda <a href=\"https:\/\/kinsta.com\/se\/blog\/rullgardinsmeny-i-wordpress\/\" target=\"_blank\" rel=\"noopener noreferrer\">rullgardinsmenyerna<\/a> f\u00f6r krokar och komponenter f\u00f6r att endast se de krokar du beh\u00f6ver.<\/p>\n<p><strong>Obs!<\/strong> Query Monitor anv\u00e4nder &#8221;Krokar&#8221; som en samlingsterm f\u00f6r b\u00e5de \u00e5tg\u00e4rder och filter, men det kallar de registrerade callback-funktionerna f\u00f6r &#8221;\u00c5tg\u00e4rder.\u201d Detta \u00e4r tekniskt sett en felaktig definition och kan vara f\u00f6rvirrande, s\u00e5 kom ih\u00e5g det.<\/p>\n<p>Du kan g\u00f6ra mer \u00e4n bara kontrollera alla fr\u00e5gor och f\u00f6rfr\u00e5gningar med Query Monitor. Det inneh\u00e5ller ocks\u00e5 avancerade funktioner som stilar, skript, <a href=\"https:\/\/kinsta.com\/se\/blog\/wordpress-flersprakig\/\" target=\"_blank\" rel=\"noopener noreferrer\">spr\u00e5k<\/a>, <a href=\"https:\/\/kinsta.com\/blog\/admin-ajax-php\/\" target=\"_blank\" rel=\"noopener noreferrer\">AJAX-anrop<\/a>, anv\u00e4ndarkapacitetskontroller, och <a href=\"https:\/\/kinsta.com\/se\/blog\/wordpress-rest-api\/\" target=\"_blank\" rel=\"noopener noreferrer\">REST API-anrop<\/a>.<\/p>\n<h2>Kroken &#8221;All&#8221;<\/h2>\n<p>WordPress har en <a href=\"https:\/\/developer.wordpress.org\/plugins\/hooks\/advanced-topics\/#debugging-with-the-all-hook\">speciell krok som heter &#8221;all&#8221;<\/a> som du kan kroka p\u00e5 f\u00f6r att k\u00f6ra en callback-funktion f\u00f6r varje enskild krok, oavsett om den \u00e4r registrerad hos dem alla eller ej. Det \u00e4r anv\u00e4ndbart om <a href=\"https:\/\/kinsta.com\/se\/blog\/wordpress-debug\/\">fels\u00f6kningssidan kraschar<\/a> eller om du vill veta n\u00e4r en viss h\u00e4ndelse intr\u00e4ffar.<\/p>\n<p>Till exempel kan du anv\u00e4nda <code><strong>all<\/strong><\/code>-kroken som i exemplet nedan f\u00f6r att <code><strong>echo<\/strong><\/code> alla \u00e5tg\u00e4rder som k\u00f6rs.<\/p>\n<pre><code class=\"language-php\">\/\/ echo all the actions being run\nfunction debug_helper_function(){\n\u00a0 \u00a0 echo '&lt;p&gt;' . current_action() . '&lt;\/p&gt;';\n}\nadd_action( 'all', 'debug_helper_function' );<\/code><\/pre>\n<p><code><strong>debug_helper_function()<\/strong><\/code>som definieras ovan k\u00f6rs n\u00e4r vilken \u00e5tg\u00e4rd som helst avfyras. Att veta vilken den senaste \u00e5tg\u00e4rden var kommer att ge dig en b\u00e4ttre uppfattning om vad du beh\u00f6ver titta p\u00e5.<\/p>\n<h2>Var lagras WordPresskrokar?<\/h2>\n<p>WordPress anv\u00e4nder <a href=\"https:\/\/developer.wordpress.org\/reference\/classes\/wp_hook\/\" target=\"_blank\" rel=\"noopener noreferrer\">wp_hook<\/a>-klassen f\u00f6r att implementera hur krokar fungerar. Denna k\u00e4rnklass anv\u00e4nds f\u00f6r att hantera alla inbyggda WordPress-\u00e5tg\u00e4rder och filter. Du hittar n\u00e4stan all kod relaterad till denna klass i <a href=\"https:\/\/core.trac.wordpress.org\/browser\/tags\/5.4\/src\/wp-includes\/class-wp-hook.php\" target=\"_blank\" rel=\"noopener noreferrer\">wp-includes\/class-wp-hook.php<\/a>-filen.<\/p>\n<p>Tekniskt sett \u00e4r <strong><code>wp_hook<\/code><\/strong>-klassen en array av objekt som inneh\u00e5ller egenskaper som callbacks, iterationer, current_priority, nesting_level och doing_action. Det definierar ocks\u00e5 en hel del anv\u00e4ndbara krokfunktioner som kan anropas med hj\u00e4lp av <a href=\"https:\/\/developer.wordpress.org\/reference\/files\/wp-includes\/class-wp-hook.php\/\" target=\"_blank\" rel=\"noopener noreferrer\">wp_hook-metoder<\/a>.<\/p>\n<p>De flesta WordPressutvecklare beh\u00f6ver inte oroa sig mycket \u00f6ver var WordPress lagrar krokar s\u00e5 l\u00e4nge de h\u00e5ller sig till Plugin API:s riktlinjer.<\/p>\n\n<h2>S\u00e5 skapar du dina egna WordPresskrokar<\/h2>\n<p>Du har sett de olika krokarna WordPress tillhandah\u00e5ller genom sin Plugin API. Du har ocks\u00e5 tittat p\u00e5 hur du kan anv\u00e4nda standardkrokarna f\u00f6r att inf\u00f6rliva din egen kod i WordPress-exekveringen.<\/p>\n<p>Om du \u00e4r en <a href=\"https:\/\/kinsta.com\/se\/blog\/wordpress-utvecklarloner\/\" target=\"_blank\" rel=\"noopener noreferrer\">plugin- eller temautvecklare<\/a> \u00e4r det bra att ge andra utvecklare ett s\u00e4tt att interagera med din kod p\u00e5 samma s\u00e4tt. Anpassade krokar l\u00e5ter dig g\u00f6ra exakt det. De l\u00e5ter andra utvecklare ut\u00f6ka och \u00e4ndra funktionaliteten i dina plugins och teman.<\/p>\n<p>Att skapa egna \u00e5tg\u00e4rder och filter \u00e4r ganska enkelt. Du anv\u00e4nder samma funktioner som WordPressk\u00e4rnan anv\u00e4nder f\u00f6r att skapa krokar. L\u00e5t oss titta p\u00e5 n\u00e5gra exempel.<\/p>\n<div><\/div><kinsta-auto-toc list-style=\"disc\" selector=\"h3\" count-number=\"6\" sub-toc=\"true\"><\/kinsta-auto-toc>\n<h3>S\u00e5 h\u00e4r skapar du anpassade \u00e5tg\u00e4rder i WordPress<\/h3>\n<p>Anv\u00e4nd funktionen <strong><code>do_action()<\/code><\/strong> f\u00f6r att skapa en egen \u00e5tg\u00e4rdskrok. S\u00e5 h\u00e4r g\u00f6r du det:<\/p>\n<pre><code class=\"language-php\">\/\/ the position where you insert your action is where it'll run when called\ndo_action( ' my_unique_custom_action' );\n\/\/ continue with the rest of your code<\/code><\/pre>\n<p>Andra utvecklare kan nu kroka p\u00e5 ditt plugin eller tema utan att \u00e4ndra k\u00e4llkoden. Allt de beh\u00f6ver g\u00f6ra \u00e4r att registrera sina callback-funktioner till ditt plugins anpassade \u00e5tg\u00e4rder med <strong><code>add_action()<\/code><\/strong>-funktionen.<\/p>\n<pre><code class=\"language-php\">add_action( 'my_unique_custom_action', 'some_callback_function' );\n\n\/\/ define the callback function you mentioned in the above action function\nsome_callback_function() {\n     \/\/ this code will run wherever your custom action hook is \n}<\/code><\/pre>\n<p>Se till att <strong>dokumentera<\/strong> dina egna krokar noggrant och f\u00f6rklara vad de g\u00f6r i detalj. N\u00e4r allt kommer omkring \u00e4r det huvudsakliga syftet med att skapa anpassade krokar att hj\u00e4lpa <a href=\"https:\/\/kinsta.com\/se\/blog\/genomsnittliga-lonen-webbutvecklare\/\" target=\"_blank\" rel=\"noopener noreferrer\">andra utvecklare<\/a> att interagera med din kod.<\/p>\n<h3>S\u00e5 h\u00e4r skapar du ett anpassat Filter i WordPress<\/h3>\n<p>Anv\u00e4nd funktionen <strong><code>apply_filters()<\/code><\/strong> f\u00f6r att skapa en anpassad filterkrok. S\u00e5 h\u00e4r kan du g\u00f6ra det:<\/p>\n<pre><code class=\"language-php\">$value_to_filter = \"I'm a string, but this can be any PHP data type\";\n\n\/\/ filters modify a value and are typically tied to a predefined variable\napply_filters( 'my_custom_filter', $value_to_filter );<\/code><\/pre>\n<p>Ditt anpassade filters parametrar b\u00f6r inneh\u00e5lla en unik identifierare och ett v\u00e4rde att filtrera. Andra utvecklare kan kroka p\u00e5 ditt anpassade filter med <strong><code>add_filter()<\/code> <\/strong>-funktionen och \u00e4ndra det skickade v\u00e4rdet.<\/p>\n<pre><code class=\"language-php\">add_filter( 'my_custom_filter', 'some_callback_function' );\n\n\/\/ define the callback function you mentioned in the above filter function\nfunction some_callback_function( $value_to_filter ) {\n    \/\/ modify the passed value (or not) \n    return $value_to_filter; \/\/ returning a value is a must for filters\n}<\/code><\/pre>\n<p>N\u00e4r du definierar ditt anpassade filter, se till att det inte \u00e4r placerat innan det v\u00e4rde som det ska filtrera kommer definieras. Om du inte placerar filtret korrekt skrivs det filtrerade v\u00e4rdet \u00f6ver av standardv\u00e4rdet som kommer efter\u00e5t.<\/p>\n<h3>Konventionella namn f\u00f6r dina anpassade krokar<\/h3>\n<p>Det \u00e4r viktigt att v\u00e4lja ett unikt namn f\u00f6r alla dina anpassade krokar. Eftersom alla plugin eller teman kan ha sina anpassade krokar, kan identiska kroknamn orsaka konflikter i koden med ov\u00e4ntade resultat.<\/p>\n<p>Om du till exempel kallar din \u00e5tg\u00e4rd f\u00f6r <strong><code>send_email<\/code><\/strong> \u00e4r det h\u00f6gst troligt att andra pluginutvecklare ocks\u00e5 kan v\u00e4lja samma term eftersom den inte \u00e4r tillr\u00e4ckligt unik. Om en webbplats installerar b\u00e5de ditt och den andra utvecklares plugins, kan det <a href=\"https:\/\/kinsta.com\/se\/blog\/wordpress-felen\/\" target=\"_blank\" rel=\"noopener noreferrer\">orsaka fel som blir sv\u00e5ra att sp\u00e5ra<\/a>.<\/p>\n<p>Du kan s\u00e4tta prefix framf\u00f6r alla dina anpassade krokar med en gemensam identifierare f\u00f6r att de ska vara b\u00e5de enkla och unika. S\u00e5 ist\u00e4llet f\u00f6r <code><strong>send_email<\/strong><\/code> kan du kalla det f\u00f6r <code><strong>plugin_name_send_email<\/strong><\/code>\u00a0(<strong>plugin_name_<\/strong> \u00e4r det unika prefixet h\u00e4r).<\/p>\n<h3>Custom Hooks Demo med ett f\u00f6rl\u00e4ngningsbart plugin<\/h3>\n<p>L\u00e5t oss skapa ett utbyggbart plugin (eller ett pluggbart plugin) som g\u00f6r det m\u00f6jligt f\u00f6r andra utvecklare att interagera med det med hj\u00e4lp av dess anpassade krokar.<\/p>\n<p>Jag ska kalla detta plugin <strong>Custom Hooks Demo<\/strong><em>.<\/em> Dess huvudsakliga funktion \u00e4r att mata ut en citatruta var du \u00e4n l\u00e4gger in en kortkod. Det kommer att inneh\u00e5lla anpassade \u00e5tg\u00e4rder och filter p\u00e5 r\u00e4tt platser f\u00f6r att g\u00f6ra det m\u00f6jligt f\u00f6r andra utvecklare att \u00e4ndra eller ut\u00f6ka dess funktionalitet.<\/p>\n<p>Du kan h\u00e4nvisa till min <a href=\"https:\/\/kinsta.com\/se\/blog\/wordpress-kortkoder\/\" target=\"_blank\" rel=\"noopener noreferrer\">guide \u00f6ver WordPress kortkoder<\/a> f\u00f6r att l\u00e4ra dig mer om hur kortkoder fungerar.<\/p>\n<p>L\u00e5t oss komma ig\u00e5ng med det f\u00f6rl\u00e4ngningsbara pluginet.<\/p>\n<pre><code class=\"language-php\">&lt;?php\n\n\/*\nPlugin Name :  Custom Hooks Demo\nDescription :  Demonstrating how to create an extensible WordPress plugin using custom hooks.\nAuthor      :  Salman Ravoof\nAuthor URI  :  https:\/\/salmanravoof.com\/\nLicense     :  GPLv2 or later\nLicense URI :  https:\/\/www.gnu.org\/licenses\/gpl-2.0.html\nText Domain :  custom-hooks-demo\n*\/\n\n\/** \n * the [custom_hooks_demo] shortcode returns the HTML code for a quote box.\n * @return string HTML code for a quote box\n*\/\nadd_shortcode( 'custom_hooks_demo', 'my_shortcode_callback' );\n\nfunction my_shortcode_callback ( $arguments ) {\n    ob_start(); \/\/ start object buffering to collect all output before sending it to the browser\n    \n    \/\/ set an action hook to run before you output anything\n    do_action( 'the_topmost_custom_action' );\n    \n    \/\/ define your variables which you want to allow to be filtered\n    $quote_content = \"Z.E.R.O. That's the number of people who'd like to have any website autoplay music on their browsers.\";\n    $quote_author = \"John Doenuts\";\n    \n    \/\/ create your custom filters after you've set the variables\n    $quote_content = apply_filters( 'custom_quote_content', $quote_content );\n    $quote_author = apply_filters( 'custom_quote_author', $quote_author );\n    \n    \/\/ build the shortcode output template\n    echo \"&lt;div style=\\\"border:3px solid #5333ed;\\\"&gt;&lt;blockquote style=\\\"margin:20px;border-color:#5333ed;\\\"&gt;\";\n    echo $quote_content;\n    echo \"&lt;br&gt;&lt;br&gt;\";\n    echo \"\u2015 &lt;strong&gt;\" . $quote_author . \"&lt;\/strong&gt;\";\n    echo \"&lt;\/blockquote&gt;&lt;\/div&gt;\";\n    \n    \/\/ set an action hook to run after you output everything\n    do_action( 'the_ending_custom_action' );\n    \n    return ob_get_clean(); \/\/ get buffer contents, delete the buffer, and then stop buffering\n}<\/code><\/pre>\n<ul>\n<li>Funktionen <strong><code>add_shortcode()<\/code><\/strong> anv\u00e4nds f\u00f6r att skapa den anpassade kortkoden. Och sedan definierar du kortkodens callback-funktion med hela detta plugins funktionalitet.<\/li>\n<li><a href=\"https:\/\/www.php.net\/manual\/en\/function.ob-start.php\">ob_start()<\/a> \u00e4r en PHP-funktion som m\u00f6jligg\u00f6r utmatningsbuffring. Det \u00e4r en superpraktisk funktion som instruerar PHP att h\u00e5lla fast vid en utmatning i serverns bufferminne snarare \u00e4n att mata ut den direkt. Du kan anv\u00e4nda den f\u00f6r att bygga komplex, l\u00e4sbar HTML-kod i PHP.<\/li>\n<li><strong><code>do_action ('the_topmost_custom_action'<\/code>)<\/strong> definierar din f\u00f6rsta anpassade \u00e5tg\u00e4rd. F\u00f6r att g\u00f6ra den anv\u00e4ndbar m\u00e5ste du definiera den innan pluginet matar ut n\u00e5gonting. Andra utvecklare kan kroka p\u00e5 denna anpassade \u00e5tg\u00e4rd f\u00f6r att k\u00f6ra sin kod innan den h\u00e4r anpassade kortkoden matar ut n\u00e5gonting.<\/li>\n<li>Skapa de variabler du vill filtrera. I detta plugin \u00e4r dessa variabler <strong><code>$quote_content<\/code><\/strong> och <strong><code>$quote_author<\/code><\/strong>. B\u00e5da tv\u00e5 \u00e4r str\u00e4ngar i det h\u00e4r exemplet, men du kan st\u00e4lla in dem att vara vilken PHP-datatyp som helst (t.ex. heltal, boolesk, array).<\/li>\n<li>Anv\u00e4nd funktionen <strong><code>apply_filters()<\/code><\/strong> f\u00f6r att skapa dina anpassade filter. Eftersom alla filter returnerar ett v\u00e4rde kan du tilldela de tidigare definierade variablerna filtrets returnerade v\u00e4rde. Andra utvecklare kan nu kroka p\u00e5 detta filter f\u00f6r att \u00e4ndra standardv\u00e4rdena f\u00f6r de f\u00f6rdefinierade variablerna.<\/li>\n<li>Anv\u00e4nd <strong><code>echo<\/code><\/strong>-uttryck f\u00f6r att bygga din kortkods utmatning rad f\u00f6r rad. Eftersom vi har aktiverat utmatningsbuffring kommer ingen utmatning att n\u00e5 webbl\u00e4saren direkt.<\/li>\n<li><strong><code>do_action ('the_ending_custom_action')<\/code><\/strong> definierar din senaste anpassade \u00e5tg\u00e4rd. Du m\u00e5ste definiera det i slutet, men innan du returnerar allt bufferinneh\u00e5ll.<\/li>\n<li><a href=\"https:\/\/www.php.net\/manual\/en\/function.ob-get-clean.php\" target=\"_blank\" rel=\"noopener noreferrer\">ob_get_clean()<\/a> \u00e4r en standard 3-i-1 PHP-funktion. Den h\u00e4mtar bufferinneh\u00e5llet, eliminerar alla bufferdata och stoppar sedan buffringen. Den <b><code>return<\/code> <\/b>det samlade bufferinneh\u00e5llet som en enda sammanl\u00e4nkad str\u00e4ng.<\/li>\n<\/ul>\n<p>N\u00e4r du har sparat och aktiverat det kommer att l\u00e4gga till <code><strong>[custom_hooks_demo]<\/strong><\/code>-kortkoden till ditt inl\u00e4ggs inneh\u00e5ll att mata ut en citatruta med standardv\u00e4rdena.<\/p>\n<figure id=\"attachment_72264\" aria-describedby=\"caption-attachment-72264\" style=\"width: 1100px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-72264 size-full\" src=\"https:\/\/kinsta.com\/se\/wp-content\/uploads\/sites\/9\/2020\/09\/custom-hooks-demo.png\" alt=\"Den ursprungliga citationsrutan med pluginet Custom Hooks Demo.\" width=\"1100\" height=\"530\"><figcaption id=\"caption-attachment-72264\" class=\"wp-caption-text\">Den ursprungliga citationsrutan med pluginet Custom Hooks Demo.<\/figcaption><\/figure>\n<p>L\u00e5t oss nu skapa ett annat plugin som heter <strong>Custom Hooks Demo Extension<\/strong>. Det kommer att kroka p\u00e5 alla anpassade krokar som skapats av f\u00f6reg\u00e5ende plugin och g\u00f6ra eller \u00e4ndra n\u00e5got.<\/p>\n<pre><code class=\"language-php\">&lt;?php\n\n\/*\nPlugin Name :  Custom Hooks Demo Extension\nDescription :  Demonstrating how you can extend WordPress plugin functionality with its custom hooks.\nAuthor      :  Salman Ravoof\nAuthor URI  :  https:\/\/salmanravoof.com\/\nLicense     :  GPLv2 or later\nLicense URI :  https:\/\/www.gnu.org\/licenses\/gpl-2.0.html\nText Domain :  custom-hooks-demo-extension\n*\/\n\n\/**\n * replace the quote content by hooking into the 'custom_quote_content' filter\n*\/\nadd_filter( 'custom_quote_content', 'new_quote_content_callback' );\nfunction new_quote_content_callback( $content ) {\n    $content = \"There are no bugs in programming. Only unexpected features.\";\n    return $content;\n}\n\n\/**\n * replace the quote author by hooking into the 'custom_quote_author'\n*\/\nadd_filter( 'custom_quote_author', 'new_quote_author_callback' );\nfunction new_quote_author_callback( $author ) {\n    $author = \"Jane Doodle\";\n    return $author;\n}\n\n\/**\n * add an image to the top of the shortcode output by hooking into the 'the_topmost_custom_action'\n*\/\nadd_action( 'the_topmost_custom_action', 'quote_image_callback' );\nfunction quote_image_callback() {\n    $url = \"https:\/\/upload.wikimedia.org\/wikipedia\/commons\/thumb\/f\/f9\/Quote-right-cs.svg\/75px-Quote-right-cs.svg.png\";\n    echo '&lt;div&gt;&lt;img class=\"aligncenter\" src=\"'.$url.'\"&gt;&lt;\/div&gt;';\n}\n\n\/**\n * add a button below the shortcut output by hooking into the 'the_ending_custom_action'\n*\/\nadd_action( 'the_ending_custom_action', 'add_button_callback' );\nfunction add_button_callback() {\n    echo '&lt;div style=\"text-align:center;\"&gt;&lt;button name=\"nice\"&gt;Nice Quote!&lt;\/button&gt;&lt;\/div&gt;';\n}<\/code><\/pre>\n<p>Som ni kan se inneh\u00e5ller inte detta till\u00e4ggsplugin n\u00e5gonting annat \u00e4n \u00e5tg\u00e4rds- och filterfunktioner som krokar p\u00e5 det ursprungliga pluginet p\u00e5 r\u00e4tt st\u00e4llen f\u00f6r att g\u00f6ra \u00e4ndringar i det.<\/p>\n<p>Det anv\u00e4nder funktionerna <code><strong>add_action()<\/strong><\/code> och <code><strong>add_filter()<\/strong><\/code> f\u00f6r att registrera sina callback-funktioner med anpassade \u00e5tg\u00e4rder och filter som skapats av det ursprungliga pluginet (t.ex. <code><strong>the_topmost_custom_action<\/strong><\/code>, <code><strong>custom_quote_author<\/strong><\/code>).<\/p>\n<figure id=\"attachment_72262\" aria-describedby=\"caption-attachment-72262\" style=\"width: 1100px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-72262 size-full\" src=\"https:\/\/kinsta.com\/se\/wp-content\/uploads\/sites\/9\/2020\/09\/tillaggspluginet-andrar-den-ursprungliga-citatrutan.png\" alt=\"Till\u00e4ggspluginet \u00e4ndrar den ursprungliga citatrutan\" width=\"1100\" height=\"682\"><figcaption id=\"caption-attachment-72262\" class=\"wp-caption-text\">Till\u00e4ggspluginet \u00e4ndrar den ursprungliga citatrutan<\/figcaption><\/figure>\n<p>Anpassade \u00e5tg\u00e4rdskrokar l\u00e5ter dig mata in din kod med r\u00e4tt intervall i det ursprungliga pluginet och k\u00f6ra dina egna skript. H\u00e4r <a href=\"https:\/\/kinsta.com\/se\/blog\/strategi-visuellt-innehall\/\" target=\"_blank\" rel=\"noopener noreferrer\">l\u00e4gger vi till en bild<\/a> l\u00e4ngst upp och en knapp l\u00e4ngst ner.<\/p>\n<p>P\u00e5 samma s\u00e4tt l\u00e5ter anpassade filterkrokar dig \u00e4ndra v\u00e4rdena f\u00f6r citatinneh\u00e5llet och dess f\u00f6rfattarnamn. Det ultimata resultatet \u00e4r ett plugin som \u00e4r fullt f\u00f6rl\u00e4ngningsbart av vem som helst, utan att \u00e4ndra dess k\u00e4llkod.<\/p>\n<h3>Arbeta med anpassade krokar fr\u00e5n tredjepartsutvecklare<\/h3>\n<p>Anpassade krokar g\u00f6r det m\u00f6jligt f\u00f6r enskilda <a href=\"https:\/\/kinsta.com\/se\/topics\/wordpress-plugins\/\" target=\"_blank\" rel=\"noopener noreferrer\">WordPress-plugins<\/a> och <a href=\"https:\/\/kinsta.com\/se\/blog\/snabbaste-wordpress-theme\/\" target=\"_blank\" rel=\"noopener noreferrer\">teman<\/a> att ha ett rikt ekosystem av utbyggbara plugins. T\u00e4nk p\u00e5 WooCommerce-pluginet. Det l\u00e4gger till e-handelsfunktionalitet till WordPress, men har ocks\u00e5 <a href=\"https:\/\/docs.woocommerce.com\/wc-apidocs\/hook-docs.html\" target=\"_blank\" rel=\"noopener noreferrer\">massor av krokar i sin kod<\/a>.<\/p>\n<figure id=\"attachment_72270\" aria-describedby=\"caption-attachment-72270\" style=\"width: 1100px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-72270 size-full\" src=\"https:\/\/kinsta.com\/se\/wp-content\/uploads\/sites\/9\/2020\/09\/woocommerces-atgards-och-filterkroksreferenser.png\" alt=\"WooCommerces \u00c5tg\u00e4rds- och filterkroksreferenser\" width=\"1100\" height=\"562\"><figcaption id=\"caption-attachment-72270\" class=\"wp-caption-text\">WooCommerces \u00c5tg\u00e4rds- och filterkroksreferenser<\/figcaption><\/figure>\n<p><a href=\"https:\/\/kinsta.com\/se\/blog\/e-handelspluginsen-wordpress\/\" target=\"_blank\" rel=\"noopener noreferrer\">WooCommerce har hundratals till\u00e4gg<\/a> och <a href=\"https:\/\/kinsta.com\/blog\/woocommerce-plugins\/\" target=\"_blank\" rel=\"noopener noreferrer\">plugins<\/a> som anv\u00e4nder dess krokar f\u00f6r att bygga p\u00e5 dess k\u00e4rnfunktionalitet och g\u00f6ra den \u00e4nnu b\u00e4ttre.<\/p>\n<p>Du kan anv\u00e4nda dessa till\u00e4gg f\u00f6r att integrera WooCommerce med Stripe, MailChimp, Salesforce, Zapier och mycket mer.<\/p>\n<figure id=\"attachment_72269\" aria-describedby=\"caption-attachment-72269\" style=\"width: 1100px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-72269 size-full\" src=\"https:\/\/kinsta.com\/se\/wp-content\/uploads\/sites\/9\/2020\/09\/woocommerces-funktionalitet.png\" alt=\"Till\u00e4gg f\u00f6rl\u00e4nger WooCommerces funktionalitet\" width=\"1100\" height=\"728\"><figcaption id=\"caption-attachment-72269\" class=\"wp-caption-text\">Till\u00e4gg f\u00f6rl\u00e4nger WooCommerces funktionalitet<\/figcaption><\/figure>\n<p>En bra praxis \u00e4r att kolla in dokumentationsavsnittet f\u00f6r popul\u00e4ra WordPressplugins f\u00f6r att se hur de implementerar anpassade krokar. N\u00e5gra av mina b\u00e4sta f\u00f6rslag \u00e4r <a href=\"https:\/\/docs.easydigitaldownloads.com\/article\/559-developers-intro-to-easy-digital-downloads\" target=\"_blank\" rel=\"noopener noreferrer\">Easy Digital Downloads<\/a>, <a href=\"https:\/\/codex.buddypress.org\/developer\/buddypress-hooks-actions-filters\/\" target=\"_blank\" rel=\"noopener noreferrer\">BuddyPress<\/a>, <a href=\"https:\/\/quizandsurveymaster.com\/docs\/developer\/hooks-and-filters\/\" target=\"_blank\" rel=\"noopener noreferrer\">Quiz and Survey Master<\/a> och <a href=\"https:\/\/docs.gravityforms.com\/category\/developers\/hooks\/\" target=\"_blank\" rel=\"noopener noreferrer\">Gravity Forms<\/a>.<\/p>\n<h3>N\u00e4r ska man anv\u00e4nda anpassade krokar?<\/h3>\n<p>Beroende p\u00e5 <a href=\"https:\/\/kinsta.com\/blog\/themeforest-pros-cons\/\" target=\"_blank\" rel=\"noopener noreferrer\">temat<\/a> eller <a href=\"https:\/\/kinsta.com\/blog\/publish-plugin-wordpress-plugin-directory\/\">pluginet du skapar<\/a>, och vem det \u00e4r avsett f\u00f6r, kanske du undrar om du beh\u00f6ver l\u00e4gga till n\u00e5gra anpassade krokar.<\/p>\n<p>En bra tumregel n\u00e4r man beslutar om man ska l\u00e4gga till anpassade krokar eller ej \u00e4r att fundera p\u00e5 om de erbjuder n\u00e5gra f\u00f6rl\u00e4ngningsf\u00f6rdelar f\u00f6r andra utvecklare. Om de inte g\u00f6r det, \u00e4r det b\u00e4ttre att v\u00e4nta tills andra utvecklare ber dig att l\u00e4gga till dem.<\/p>\n<p>Du m\u00e5ste vara mycket s\u00e4ker p\u00e5 om du beh\u00f6ver l\u00e4gga till anpassade krokar till ditt plugin eller tema eller ej. N\u00e4r det sl\u00e4pps, och om andra utvecklare redan har anv\u00e4nt det, kan du aldrig \u00e4ndra det utan att bryta bak\u00e5tkompatibiliteten.<\/p>\n<h2>Ta bort Callback-funktioner fr\u00e5n WordPresskrokar<\/h2>\n<p>Du har redan sett exempel p\u00e5 hur du tar bort callback-funktioner som \u00e4r registrerade p\u00e5 vissa krokar. Dessa callbacks kan registreras av plugins, teman, och till och med sj\u00e4lva WordPressk\u00e4rnan. L\u00e5t oss titta p\u00e5 att ta bort krokade callback-funktioner med fler exempel.<\/p>\n<p>F\u00f6r att ta bort en callback-funktion fr\u00e5n en krok, beroende p\u00e5 om den \u00e4r registrerad till en \u00e5tg\u00e4rd eller ett filter, m\u00e5ste du anv\u00e4nda funktionerna <strong><code>remove_action()<\/code><\/strong> eller <strong><code>remove_filter()<\/code><\/strong>.<\/p>\n<p>Du beh\u00f6ver vara medveten om att du m\u00e5ste anropa dessa funktioner med parametrar som \u00e4r identiska med de som anv\u00e4ndes f\u00f6r att faktiskt registrera callback-funktionen. I princip kopiera och klistra in parametrarna fr\u00e5n deras <strong><code>add_action()<\/code><\/strong>eller <strong><code>add_filter()<\/code><\/strong>-funktioner.<\/p>\n<p>Du kan bara ta bort callback-funktioner efter att de \u00e4r registrerade. Om du f\u00f6rs\u00f6ker ta bort dem innan de \u00e4r registrerade kommer borttagningsprocessen att misslyckas. Du m\u00e5ste f\u00e5 krokarnas exekveringsordning i r\u00e4tt ordning.<\/p>\n<p>L\u00e5t oss s\u00e4ga att du vill ta bort en callback-funktion som \u00e4r registrerad av ett tema som l\u00e4gger till en massa on\u00f6digt till din webbplats (<a href=\"https:\/\/kinsta.com\/se\/lar\/snabba-upp-wordpress\/\" target=\"_blank\" rel=\"noopener noreferrer\">du vill ha en snabb webbplats<\/a>, eller hur?).<\/p>\n<pre><code class=\"language-php\">function wp_bloated_callback_function() {\u00a0 \u00a0 \n\/\/ some code that adds a lot of bloat to the site\n}\nadd_action( 'template_redirect', 'wp_bloated_callback_function', 5 );<\/code><\/pre>\n<p>Ovanst\u00e5ende callback-funktion kan till exempel ladda m\u00e5nga on\u00f6diga skript och formatmallar. Att ta bort den kommer att ge din webbplats en enorm <a href=\"https:\/\/kinsta.com\/learn\/page-speed\/\" target=\"_blank\" rel=\"noopener noreferrer\">prestanda\u00f6kning<\/a>.<\/p>\n<p>Du m\u00e5ste dock se till att funktionen <code><strong>remove_action()<\/strong><\/code>\u00a0k\u00f6rs f\u00f6rst efter <a href=\"https:\/\/developer.wordpress.org\/reference\/hooks\/template_redirect\/\" target=\"_blank\" rel=\"noopener noreferrer\">template_redirect<\/a>-\u00e5tg\u00e4rden. Ett s\u00e4tt att g\u00f6ra detta \u00e4r att kroka p\u00e5 <a href=\"https:\/\/developer.wordpress.org\/reference\/hooks\/after_setup_theme\/\" target=\"_blank\" rel=\"noopener noreferrer\">after_setup_theme<\/a>-\u00e5tg\u00e4rden eftersom den utl\u00f6ses efter <code><strong>template_redirect<\/strong><\/code>-\u00e5tg\u00e4rden.<\/p>\n<pre><code class=\"language-php\">function wp_remove_bloat() {\n    \/\/ ensure all parameters are identical to the original add_action() function\n  \u00a0 remove_action( 'template_redirect', 'wp_bloated_callback_function', 5 );\n}\n\n\/\/ ensure that remove_action() is called only after add_action()\nadd_action( 'after_setup_theme', 'wp_remove_bloat' );<\/code><\/pre>\n<p><code><strong>wp_bloated_callback_function()<\/strong><\/code> kommer nu att krokas av fr\u00e5n <code><strong>template_redirect<\/strong><\/code>-\u00e5tg\u00e4rden.<\/p>\n<h3>S\u00e4rskilda fall av att ta bort callback-funktioner<\/h3>\n<p>Det kan kr\u00e4vas mer f\u00f6r att ta bort callback-funktioner \u00e4n att bara inaktivera dem helt och h\u00e5llet. Ibland kan du beh\u00f6va ta bort dem tillf\u00e4lligt, k\u00f6ra din kod och sedan l\u00e4gga till dem igen.<\/p>\n<p>Till exempel aktiveras <a href=\"https:\/\/developer.wordpress.org\/reference\/hooks\/save_post\/\" target=\"_blank\" rel=\"noopener noreferrer\">save_post<\/a>-\u00e5tg\u00e4rden varje g\u00e5ng funktionerna <code><strong>wp_insert_post()<\/strong><\/code> och <code><strong>wp_publish_post()<\/strong><\/code>anropas. Du <a href=\"https:\/\/core.trac.wordpress.org\/browser\/tags\/5.4\/src\/wp-includes\/post.php#L4135\" target=\"_blank\" rel=\"noopener noreferrer\">hittar dem b\u00e5da definierade<\/a> i <code><strong>wp-includes\/post.php<\/strong><\/code>-filen.<\/p>\n<p>S\u00e5 om du har en callback-funktion krokad p\u00e5 <code><strong>save_post<\/strong><\/code>-\u00e5tg\u00e4rden, och om du anropar funktionerna <code><strong>wp_insert_post()<\/strong><\/code>\u00a0eller <code><strong>wp_publish_post()<\/strong><\/code>\u00a0inom din callback-funktion, kommer <code><strong>save_post<\/strong><\/code>-\u00e5tg\u00e4rden att avfyras flera g\u00e5nger.<\/p>\n<pre><code class=\"language-php\">function some_callback_function( $post_id, $post ) {\n\u00a0 \u00a0 \/\/ do something here\n  \u00a0 wp_insert_post( [some_array] ); \/\/ this function also calls the 'save_post' action\n\u00a0 \u00a0 \/\/ maybe do something more\n}\nadd_action( 'save_post', 'some_callback_function', 10, 2 );<\/code><\/pre>\n<p>En funktion som anropar \u00e5tg\u00e4rden som ocks\u00e5 anropar den kan skapa ov\u00e4ntade resultat. Ett s\u00e4tt att komma runt det h\u00e4r problemet \u00e4r att anv\u00e4nda funktionen <code><strong>remove_action()<\/strong><\/code>\u00a0inuti din callback-funktion innan du anropar <code><strong>wp_insert_post()<\/strong><\/code>.<\/p>\n<pre><code class=\"language-php\">function some_callback_function( $post_id, $post ) {\n\u00a0 \u00a0 \/\/ do something here\n\u00a0 \u00a0 \n    \/\/ remove the callback function from the \u2018save_post\u2019 action\n\u00a0 \u00a0 remove_action( 'save_post', 'some_callback_function', 10, 2 );\n\u00a0 \u00a0 \n    \/\/ now run the wp_insert_post() function\n    wp_insert_post( [some_array] );\n\u00a0 \u00a0 \n    \/\/ add the callback function back to the \u2018save_post\u2019 action\n\u00a0 \u00a0 add_action( 'save_post', 'some_callback_function', 10, 2 );\n\u00a0 \u00a0 \n    \/\/ maybe do something more\n}\nadd_action( 'save_post', 'some_callback_function', 10, 2 );<\/code><\/pre>\n<p>Det \u00e4r en annan praktisk anv\u00e4ndning av <strong><code>remove_action()<\/code> <\/strong>eller <code><strong>remove_filter()<\/strong><\/code>funktionerna. Att gr\u00e4va djupare in i WordPressk\u00e4rnan hj\u00e4lper dig att f\u00f6rst\u00e5 hur du b\u00e4ttre kan undvika dessa situationer.<\/p>\n<h2>Bonusguider f\u00f6r WordPresskrokar<\/h2>\n<ul>\n<li><a href=\"https:\/\/kinsta.com\/blog\/add-code-wordpress-header-footer\/#how-to-manually-add-code-to-wordpress-header-and-footer\" target=\"_blank\" rel=\"noopener noreferrer\">L\u00e4gg till kod manuellt i WordPress header och footer.<\/a><\/li>\n<li><a href=\"https:\/\/kinsta.com\/se\/blog\/wordpress-cron-job\/\" target=\"_blank\" rel=\"noopener noreferrer\">Din kompletta guide till WordPress Mediabibliotek<\/a><\/li>\n<li><a href=\"https:\/\/kinsta.com\/se\/blog\/wordpress-cron-job\/\" target=\"_blank\" rel=\"noopener noreferrer\">S\u00e5 skapar och \u00e4ndrar du ett WordPress Cron-jobb<\/a><\/li>\n<li><a href=\"https:\/\/kinsta.com\/se\/blog\/wordpress-barntema\/#create\" target=\"_blank\" rel=\"noopener noreferrer\">S\u00e5 skapar du ett WordPress-barntema<\/a><\/li>\n<li><a href=\"https:\/\/kinsta.com\/blog\/disable-wordpress-plugins-loading\/\" target=\"_blank\" rel=\"noopener noreferrer\">Inaktivera WordPressplugins fr\u00e5n att ladda p\u00e5 specifika sidor och inl\u00e4gg<\/a><\/li>\n<li><a href=\"https:\/\/kinsta.com\/blog\/disable-emojis-wordpress\/#2-disable-emojis-in-wordpress-with-code\" target=\"_blank\" rel=\"noopener noreferrer\">Inaktivera emojis i WordPress med kod<\/a><\/li>\n<\/ul>\n\n<h2>Sammanfattning<\/h2>\n<p>Det finns flera f\u00f6rdelar med att anv\u00e4nda WordPresskrokar om du \u00e4r en <a href=\"https:\/\/kinsta.com\/blog\/hire-wordpress-developer\/\" target=\"_blank\" rel=\"noopener noreferrer\">WordPressutvecklare<\/a>.<\/p>\n<p>Krokar l\u00e5ter dig inte bara \u00e4ndra eller ut\u00f6ka WordPressk\u00e4rnans funktionalitet, men du kan ocks\u00e5 anv\u00e4nda dem f\u00f6r att \u00e4ndra plugins, teman, och l\u00e5ta andra utvecklare interagera med dina plugins eller teman.<\/p>\n<p>Det \u00e4r dags att l\u00e5ta WordPresskrokar f\u00e5 dig p\u00e5 kroken!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>WordPresskrokar \u00e4r ett av de viktigaste verktygen att ha i en WordPress-utvecklares arsenal. De \u00e4r grunden f\u00f6r plugin- och temautveckling inom WordPress. Du kan anv\u00e4nda WordPress &#8230;<\/p>\n","protected":false},"author":117,"featured_media":37309,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[42,297],"topic":[803],"class_list":["post-37272","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","tag-webdev","tag-wordpress-hooks","topic-php-funktion"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v24.6 (Yoast SEO v24.6) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Bootcamp f\u00f6r WordPresskrokar: S\u00e5 anv\u00e4nder du \u00e5tg\u00e4rds-, filter- och anpassade krokar<\/title>\n<meta name=\"description\" content=\"L\u00e4r dig WordPresskrokar p\u00e5 djupet. Bem\u00e4stra \u00e5tg\u00e4rder, filter och anpassade krokar genom att skapa ditt eget f\u00f6rl\u00e4ngningsbara plugin. \u00d6ka dina WordPressutvecklings-f\u00e4rdigheter nu!\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/kinsta.com\/se\/blog\/wordpresskrokar\/\" \/>\n<meta property=\"og:locale\" content=\"sv_SE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Bootcamp f\u00f6r WordPresskrokar: S\u00e5 anv\u00e4nder du \u00e5tg\u00e4rds-, filter- och anpassade krokar\" \/>\n<meta property=\"og:description\" content=\"L\u00e4r dig WordPresskrokar p\u00e5 djupet. Bem\u00e4stra \u00e5tg\u00e4rder, filter och anpassade krokar genom att skapa ditt eget f\u00f6rl\u00e4ngningsbara plugin. \u00d6ka dina WordPressutvecklings-f\u00e4rdigheter nu!\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinsta.com\/se\/blog\/wordpresskrokar\/\" \/>\n<meta property=\"og:site_name\" content=\"Kinsta\u00ae\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/kinstasweden\/\" \/>\n<meta property=\"article:published_time\" content=\"2020-09-11T06:44:53+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-09-21T09:23:04+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinsta.com\/se\/wp-content\/uploads\/sites\/9\/2020\/09\/wordpresskrokar.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1460\" \/>\n\t<meta property=\"og:image:height\" content=\"730\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Salman Ravoof\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:description\" content=\"L\u00e4r dig WordPresskrokar p\u00e5 djupet. Bem\u00e4stra \u00e5tg\u00e4rder, filter och anpassade krokar genom att skapa ditt eget f\u00f6rl\u00e4ngningsbara plugin. \u00d6ka dina WordPressutvecklings-f\u00e4rdigheter nu!\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinsta.com\/se\/wp-content\/uploads\/sites\/9\/2020\/09\/wordpresskrokar.jpg\" \/>\n<meta name=\"twitter:creator\" content=\"@salmanravoof\" \/>\n<meta name=\"twitter:site\" content=\"@kinsta_se\" \/>\n<meta name=\"twitter:label1\" content=\"Skriven av\" \/>\n\t<meta name=\"twitter:data1\" content=\"Salman Ravoof\" \/>\n\t<meta name=\"twitter:label2\" content=\"Ber\u00e4knad l\u00e4stid\" \/>\n\t<meta name=\"twitter:data2\" content=\"67 minuter\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/kinsta.com\/se\/blog\/wordpresskrokar\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/se\/blog\/wordpresskrokar\/\"},\"author\":{\"name\":\"Salman Ravoof\",\"@id\":\"https:\/\/kinsta.com\/se\/#\/schema\/person\/9cafd2eedd617e640eeea4cf3a5fd987\"},\"headline\":\"Bootcamp f\u00f6r WordPresskrokar: S\u00e5 anv\u00e4nder du \u00e5tg\u00e4rds-, filter- och anpassade krokar\",\"datePublished\":\"2020-09-11T06:44:53+00:00\",\"dateModified\":\"2023-09-21T09:23:04+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinsta.com\/se\/blog\/wordpresskrokar\/\"},\"wordCount\":10597,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/se\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/se\/blog\/wordpresskrokar\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/se\/wp-content\/uploads\/sites\/9\/2020\/09\/wordpresskrokar.jpg\",\"keywords\":[\"webdev\",\"WordPress Hooks\"],\"articleSection\":[\"WordPress-utveckling\"],\"inLanguage\":\"sv-SE\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/kinsta.com\/se\/blog\/wordpresskrokar\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinsta.com\/se\/blog\/wordpresskrokar\/\",\"url\":\"https:\/\/kinsta.com\/se\/blog\/wordpresskrokar\/\",\"name\":\"Bootcamp f\u00f6r WordPresskrokar: S\u00e5 anv\u00e4nder du \u00e5tg\u00e4rds-, filter- och anpassade krokar\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/se\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinsta.com\/se\/blog\/wordpresskrokar\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/se\/blog\/wordpresskrokar\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/se\/wp-content\/uploads\/sites\/9\/2020\/09\/wordpresskrokar.jpg\",\"datePublished\":\"2020-09-11T06:44:53+00:00\",\"dateModified\":\"2023-09-21T09:23:04+00:00\",\"description\":\"L\u00e4r dig WordPresskrokar p\u00e5 djupet. Bem\u00e4stra \u00e5tg\u00e4rder, filter och anpassade krokar genom att skapa ditt eget f\u00f6rl\u00e4ngningsbara plugin. \u00d6ka dina WordPressutvecklings-f\u00e4rdigheter nu!\",\"breadcrumb\":{\"@id\":\"https:\/\/kinsta.com\/se\/blog\/wordpresskrokar\/#breadcrumb\"},\"inLanguage\":\"sv-SE\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinsta.com\/se\/blog\/wordpresskrokar\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"sv-SE\",\"@id\":\"https:\/\/kinsta.com\/se\/blog\/wordpresskrokar\/#primaryimage\",\"url\":\"https:\/\/kinsta.com\/se\/wp-content\/uploads\/sites\/9\/2020\/09\/wordpresskrokar.jpg\",\"contentUrl\":\"https:\/\/kinsta.com\/se\/wp-content\/uploads\/sites\/9\/2020\/09\/wordpresskrokar.jpg\",\"width\":1460,\"height\":730,\"caption\":\"WordPresskrokar\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinsta.com\/se\/blog\/wordpresskrokar\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/kinsta.com\/se\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"PHP-funktion\",\"item\":\"https:\/\/kinsta.com\/se\/topics\/php-funktion\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Bootcamp f\u00f6r WordPresskrokar: S\u00e5 anv\u00e4nder du \u00e5tg\u00e4rds-, filter- och anpassade krokar\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/kinsta.com\/se\/#website\",\"url\":\"https:\/\/kinsta.com\/se\/\",\"name\":\"Kinsta\u00ae\",\"description\":\"Snabba, s\u00e4kra, premium hosting-l\u00f6sningar\",\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/se\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/kinsta.com\/se\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"sv-SE\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/kinsta.com\/se\/#organization\",\"name\":\"Kinsta\",\"url\":\"https:\/\/kinsta.com\/se\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"sv-SE\",\"@id\":\"https:\/\/kinsta.com\/se\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/kinsta.com\/se\/wp-content\/uploads\/sites\/9\/2023\/12\/kinsta-logo.jpeg\",\"contentUrl\":\"https:\/\/kinsta.com\/se\/wp-content\/uploads\/sites\/9\/2023\/12\/kinsta-logo.jpeg\",\"width\":500,\"height\":500,\"caption\":\"Kinsta\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/se\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/kinstasweden\/\",\"https:\/\/x.com\/kinsta_se\",\"https:\/\/www.instagram.com\/kinstahosting\/\",\"https:\/\/www.linkedin.com\/company\/kinsta\/\",\"https:\/\/www.pinterest.com\/kinstahosting\/\",\"https:\/\/www.youtube.com\/c\/Kinsta\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/kinsta.com\/se\/#\/schema\/person\/9cafd2eedd617e640eeea4cf3a5fd987\",\"name\":\"Salman Ravoof\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"sv-SE\",\"@id\":\"https:\/\/kinsta.com\/se\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/0c5885f75cb78473fb7408e5e49ad190?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/0c5885f75cb78473fb7408e5e49ad190?s=96&d=mm&r=g\",\"caption\":\"Salman Ravoof\"},\"description\":\"Salman Ravoof is a self-taught web developer, writer, creator, and a huge admirer of Free and Open Source Software (FOSS). Besides tech, he's excited by science, philosophy, photography, arts, cats, and food. Learn more about him on his website, and connect with Salman on Twitter.\",\"sameAs\":[\"https:\/\/salmanravoof.com\",\"https:\/\/www.linkedin.com\/in\/salman-ravoof-5a749133\/\",\"https:\/\/x.com\/salmanravoof\"],\"url\":\"https:\/\/kinsta.com\/se\/blog\/author\/salmanravoof\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Bootcamp f\u00f6r WordPresskrokar: S\u00e5 anv\u00e4nder du \u00e5tg\u00e4rds-, filter- och anpassade krokar","description":"L\u00e4r dig WordPresskrokar p\u00e5 djupet. Bem\u00e4stra \u00e5tg\u00e4rder, filter och anpassade krokar genom att skapa ditt eget f\u00f6rl\u00e4ngningsbara plugin. \u00d6ka dina WordPressutvecklings-f\u00e4rdigheter nu!","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/kinsta.com\/se\/blog\/wordpresskrokar\/","og_locale":"sv_SE","og_type":"article","og_title":"Bootcamp f\u00f6r WordPresskrokar: S\u00e5 anv\u00e4nder du \u00e5tg\u00e4rds-, filter- och anpassade krokar","og_description":"L\u00e4r dig WordPresskrokar p\u00e5 djupet. Bem\u00e4stra \u00e5tg\u00e4rder, filter och anpassade krokar genom att skapa ditt eget f\u00f6rl\u00e4ngningsbara plugin. \u00d6ka dina WordPressutvecklings-f\u00e4rdigheter nu!","og_url":"https:\/\/kinsta.com\/se\/blog\/wordpresskrokar\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/kinstasweden\/","article_published_time":"2020-09-11T06:44:53+00:00","article_modified_time":"2023-09-21T09:23:04+00:00","og_image":[{"width":1460,"height":730,"url":"https:\/\/kinsta.com\/se\/wp-content\/uploads\/sites\/9\/2020\/09\/wordpresskrokar.jpg","type":"image\/jpeg"}],"author":"Salman Ravoof","twitter_card":"summary_large_image","twitter_description":"L\u00e4r dig WordPresskrokar p\u00e5 djupet. Bem\u00e4stra \u00e5tg\u00e4rder, filter och anpassade krokar genom att skapa ditt eget f\u00f6rl\u00e4ngningsbara plugin. \u00d6ka dina WordPressutvecklings-f\u00e4rdigheter nu!","twitter_image":"https:\/\/kinsta.com\/se\/wp-content\/uploads\/sites\/9\/2020\/09\/wordpresskrokar.jpg","twitter_creator":"@salmanravoof","twitter_site":"@kinsta_se","twitter_misc":{"Skriven av":"Salman Ravoof","Ber\u00e4knad l\u00e4stid":"67 minuter"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinsta.com\/se\/blog\/wordpresskrokar\/#article","isPartOf":{"@id":"https:\/\/kinsta.com\/se\/blog\/wordpresskrokar\/"},"author":{"name":"Salman Ravoof","@id":"https:\/\/kinsta.com\/se\/#\/schema\/person\/9cafd2eedd617e640eeea4cf3a5fd987"},"headline":"Bootcamp f\u00f6r WordPresskrokar: S\u00e5 anv\u00e4nder du \u00e5tg\u00e4rds-, filter- och anpassade krokar","datePublished":"2020-09-11T06:44:53+00:00","dateModified":"2023-09-21T09:23:04+00:00","mainEntityOfPage":{"@id":"https:\/\/kinsta.com\/se\/blog\/wordpresskrokar\/"},"wordCount":10597,"commentCount":0,"publisher":{"@id":"https:\/\/kinsta.com\/se\/#organization"},"image":{"@id":"https:\/\/kinsta.com\/se\/blog\/wordpresskrokar\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/se\/wp-content\/uploads\/sites\/9\/2020\/09\/wordpresskrokar.jpg","keywords":["webdev","WordPress Hooks"],"articleSection":["WordPress-utveckling"],"inLanguage":"sv-SE","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/kinsta.com\/se\/blog\/wordpresskrokar\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/kinsta.com\/se\/blog\/wordpresskrokar\/","url":"https:\/\/kinsta.com\/se\/blog\/wordpresskrokar\/","name":"Bootcamp f\u00f6r WordPresskrokar: S\u00e5 anv\u00e4nder du \u00e5tg\u00e4rds-, filter- och anpassade krokar","isPartOf":{"@id":"https:\/\/kinsta.com\/se\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinsta.com\/se\/blog\/wordpresskrokar\/#primaryimage"},"image":{"@id":"https:\/\/kinsta.com\/se\/blog\/wordpresskrokar\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/se\/wp-content\/uploads\/sites\/9\/2020\/09\/wordpresskrokar.jpg","datePublished":"2020-09-11T06:44:53+00:00","dateModified":"2023-09-21T09:23:04+00:00","description":"L\u00e4r dig WordPresskrokar p\u00e5 djupet. Bem\u00e4stra \u00e5tg\u00e4rder, filter och anpassade krokar genom att skapa ditt eget f\u00f6rl\u00e4ngningsbara plugin. \u00d6ka dina WordPressutvecklings-f\u00e4rdigheter nu!","breadcrumb":{"@id":"https:\/\/kinsta.com\/se\/blog\/wordpresskrokar\/#breadcrumb"},"inLanguage":"sv-SE","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinsta.com\/se\/blog\/wordpresskrokar\/"]}]},{"@type":"ImageObject","inLanguage":"sv-SE","@id":"https:\/\/kinsta.com\/se\/blog\/wordpresskrokar\/#primaryimage","url":"https:\/\/kinsta.com\/se\/wp-content\/uploads\/sites\/9\/2020\/09\/wordpresskrokar.jpg","contentUrl":"https:\/\/kinsta.com\/se\/wp-content\/uploads\/sites\/9\/2020\/09\/wordpresskrokar.jpg","width":1460,"height":730,"caption":"WordPresskrokar"},{"@type":"BreadcrumbList","@id":"https:\/\/kinsta.com\/se\/blog\/wordpresskrokar\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kinsta.com\/se\/"},{"@type":"ListItem","position":2,"name":"PHP-funktion","item":"https:\/\/kinsta.com\/se\/topics\/php-funktion\/"},{"@type":"ListItem","position":3,"name":"Bootcamp f\u00f6r WordPresskrokar: S\u00e5 anv\u00e4nder du \u00e5tg\u00e4rds-, filter- och anpassade krokar"}]},{"@type":"WebSite","@id":"https:\/\/kinsta.com\/se\/#website","url":"https:\/\/kinsta.com\/se\/","name":"Kinsta\u00ae","description":"Snabba, s\u00e4kra, premium hosting-l\u00f6sningar","publisher":{"@id":"https:\/\/kinsta.com\/se\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kinsta.com\/se\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"sv-SE"},{"@type":"Organization","@id":"https:\/\/kinsta.com\/se\/#organization","name":"Kinsta","url":"https:\/\/kinsta.com\/se\/","logo":{"@type":"ImageObject","inLanguage":"sv-SE","@id":"https:\/\/kinsta.com\/se\/#\/schema\/logo\/image\/","url":"https:\/\/kinsta.com\/se\/wp-content\/uploads\/sites\/9\/2023\/12\/kinsta-logo.jpeg","contentUrl":"https:\/\/kinsta.com\/se\/wp-content\/uploads\/sites\/9\/2023\/12\/kinsta-logo.jpeg","width":500,"height":500,"caption":"Kinsta"},"image":{"@id":"https:\/\/kinsta.com\/se\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/kinstasweden\/","https:\/\/x.com\/kinsta_se","https:\/\/www.instagram.com\/kinstahosting\/","https:\/\/www.linkedin.com\/company\/kinsta\/","https:\/\/www.pinterest.com\/kinstahosting\/","https:\/\/www.youtube.com\/c\/Kinsta"]},{"@type":"Person","@id":"https:\/\/kinsta.com\/se\/#\/schema\/person\/9cafd2eedd617e640eeea4cf3a5fd987","name":"Salman Ravoof","image":{"@type":"ImageObject","inLanguage":"sv-SE","@id":"https:\/\/kinsta.com\/se\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/0c5885f75cb78473fb7408e5e49ad190?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/0c5885f75cb78473fb7408e5e49ad190?s=96&d=mm&r=g","caption":"Salman Ravoof"},"description":"Salman Ravoof is a self-taught web developer, writer, creator, and a huge admirer of Free and Open Source Software (FOSS). Besides tech, he's excited by science, philosophy, photography, arts, cats, and food. Learn more about him on his website, and connect with Salman on Twitter.","sameAs":["https:\/\/salmanravoof.com","https:\/\/www.linkedin.com\/in\/salman-ravoof-5a749133\/","https:\/\/x.com\/salmanravoof"],"url":"https:\/\/kinsta.com\/se\/blog\/author\/salmanravoof\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/kinsta.com\/se\/wp-json\/wp\/v2\/posts\/37272","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kinsta.com\/se\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kinsta.com\/se\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kinsta.com\/se\/wp-json\/wp\/v2\/users\/117"}],"replies":[{"embeddable":true,"href":"https:\/\/kinsta.com\/se\/wp-json\/wp\/v2\/comments?post=37272"}],"version-history":[{"count":14,"href":"https:\/\/kinsta.com\/se\/wp-json\/wp\/v2\/posts\/37272\/revisions"}],"predecessor-version":[{"id":51070,"href":"https:\/\/kinsta.com\/se\/wp-json\/wp\/v2\/posts\/37272\/revisions\/51070"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinsta.com\/se\/wp-json\/kinsta\/v1\/posts\/37272\/translations\/en"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinsta.com\/se\/wp-json\/kinsta\/v1\/posts\/37272\/translations\/fr"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinsta.com\/se\/wp-json\/kinsta\/v1\/posts\/37272\/translations\/es"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinsta.com\/se\/wp-json\/kinsta\/v1\/posts\/37272\/translations\/it"},{"embeddable":true,"hreflang":"pt","title":"Portuguese","href":"https:\/\/kinsta.com\/se\/wp-json\/kinsta\/v1\/posts\/37272\/translations\/pt"},{"embeddable":true,"hreflang":"de","title":"German","href":"https:\/\/kinsta.com\/se\/wp-json\/kinsta\/v1\/posts\/37272\/translations\/de"},{"embeddable":true,"hreflang":"nl","title":"Dutch","href":"https:\/\/kinsta.com\/se\/wp-json\/kinsta\/v1\/posts\/37272\/translations\/nl"},{"embeddable":true,"hreflang":"sv","title":"Swedish","href":"https:\/\/kinsta.com\/se\/wp-json\/kinsta\/v1\/posts\/37272\/translations\/se"},{"href":"https:\/\/kinsta.com\/se\/wp-json\/kinsta\/v1\/posts\/37272\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinsta.com\/se\/wp-json\/wp\/v2\/media\/37309"}],"wp:attachment":[{"href":"https:\/\/kinsta.com\/se\/wp-json\/wp\/v2\/media?parent=37272"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinsta.com\/se\/wp-json\/wp\/v2\/tags?post=37272"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinsta.com\/se\/wp-json\/wp\/v2\/topic?post=37272"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}