{"id":233521,"date":"2023-02-16T09:33:00","date_gmt":"2023-02-16T06:33:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=233521"},"modified":"2022-11-11T00:08:40","modified_gmt":"2022-11-10T21:08:40","slug":"laegg-till-en-anpassad-permalaenkinstaellning-foer-din-anpassade-inlaeggstyp-i-wordpress","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/sv\/laegg-till-en-anpassad-permalaenkinstaellning-foer-din-anpassade-inlaeggstyp-i-wordpress\/","title":{"rendered":"L\u00e4gg till en anpassad permal\u00e4nkinst\u00e4llning f\u00f6r din anpassade inl\u00e4ggstyp i WordPress"},"content":{"rendered":"\n<p>Det h\u00e4r \u00e4r en handledning om hur du l\u00e4gger till en anpassad inst\u00e4llning p\u00e5 WordPresss adminsida &quot;Inst\u00e4llningar &gt; Permal\u00e4nkar&quot; f\u00f6r att definiera slug f\u00f6r din anpassade inl\u00e4ggstyp. Om du utvecklar ett tema eller plugin f\u00f6r andra som har en inbyggd anpassad inl\u00e4ggstyp, att l\u00e4gga till den h\u00e4r inst\u00e4llningen kommer att uppskattas av anv\u00e4ndaren f\u00f6r att l\u00e5ta dem best\u00e4mma URL-strukturen f\u00f6r anpassad inl\u00e4ggstyp.<\/p>\n<p>Jag kommer inte att g\u00e5 igenom i detalj hur man l\u00e4gger till en anpassad inl\u00e4ggstyp; om du \u00e4r os\u00e4ker rekommenderar jag att du tar en titt p\u00e5 <a href=\"https:\/\/awhitepixel.com\/blog\/how-to-create-custom-post-types-and-custom-taxonomies\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">hur man l\u00e4gger till en anpassad inl\u00e4ggstyp<\/a>.<\/p>\n<p>Anta att du har en kod f\u00f6r att registrera din anpassade inl\u00e4ggstyp s\u00e5 h\u00e4r:<\/p>\n<pre><code>add_action('init', function() {\n    register_post_type('reference', [\n        'label' =&gt; __('References', 'txtdomain'),\n        'public' =&gt; true,\n        'menu_position' =&gt; 5,\n        'menu_icon' =&gt; 'dashicons-book',\n        'supports' =&gt; ['title', 'editor', 'thumbnail', 'author', 'custom-fields', 'revisions'],\n        'show_in_rest' =&gt; true,\n        'rewrite' =&gt; [\n            'slug' =&gt; 'reference',\n            'with_front' =&gt; false\n        ],\n        'labels' =&gt; [\n            'singular_name' =&gt; __('Reference', 'txtdomain'),\n            'add_new_item' =&gt; __('Add new reference', 'txtdomain'),\n            'new_item' =&gt; __('New reference', 'txtdomain'),\n            'view_item' =&gt; __('View reference', 'txtdomain'),\n            'not_found' =&gt; __('No references found', 'txtdomain'),\n            'not_found_in_trash' =&gt; __('No references found in trash', 'txtdomain'),\n            'all_items' =&gt; __('All references', 'txtdomain'),\n            'insert_into_item' =&gt; __('Insert into reference', 'txtdomain')\n        ],      \n    ]);\n});<\/code><\/pre>\n<p>Den del vi \u00e4r intresserade av \u00e4r <code>rewrite<\/code>argumentet. Det \u00e4r h\u00e4r vi definierar vilken slug posttypen kommer att f\u00e5 framf\u00f6r alla sina inl\u00e4gg. Din kod f\u00f6r att registrera en anpassad inl\u00e4ggstyp kan vara n\u00e5got annorlunda, t.ex. utan &#8217; <code>with_front<\/code>&#8217;, men det vi \u00e4r intresserade av h\u00e4r \u00e4r &#8217; <code>slug<\/code>&#8217;:<\/p>\n<pre><code>'rewrite' =&gt; [\n    'slug' =&gt; 'reference',\n    'with_front' =&gt; false\n]<\/code><\/pre>\n<p>Med den h\u00e4r koden h\u00e5rdkodar du praktiskt taget vad inl\u00e4ggens permal\u00e4nksslug kommer att vara. En posttyp f\u00f6r referenser kan anv\u00e4ndas f\u00f6r m\u00e5nga typer av inneh\u00e5ll och temaanv\u00e4ndare; t.ex. projekt, portfolio, kundreferenser, f\u00f6retagsreferenser etc. F\u00f6r att g\u00f6ra ditt tema flexibelt kanske du vill l\u00e5ta temaanv\u00e4ndaren sj\u00e4lv best\u00e4mma posttypens slug.<\/p>\n<p>S\u00e5 l\u00e5t oss ta en titt p\u00e5 hur man g\u00f6r det!<\/p>\n<h2>L\u00e4gger till och sparar f\u00e4ltet<\/h2>\n<p>Att anv\u00e4nda WordPress Settings API f\u00f6renklar detta n\u00e5got f\u00f6r oss. Allt vi beh\u00f6ver \u00e4r att l\u00e4gga till ett inst\u00e4llningsf\u00e4lt och tala om f\u00f6r WordPress vilken adminsida vi vill att den ska visas p\u00e5 \u2013 i v\u00e5rt fall inst\u00e4llningssidan f\u00f6r permal\u00e4nkar. T\u00e4nk p\u00e5 att vi m\u00e5ste skriva en funktion som faktiskt sparar v\u00e4rdet ocks\u00e5, vilket vi g\u00f6r i slutet.<\/p>\n<p>Vi hakar p\u00e5 v\u00e5r funktion i <code>admin_init<\/code>kroken och registrerar v\u00e5r inst\u00e4llning. N\u00e4r vi registrerar en inst\u00e4llning definierar vi vilken funktion den ska k\u00f6ra f\u00f6r att mata ut inst\u00e4llningen:<\/p>\n<pre><code>add_action('admin_init', function() {\n    add_settings_field('mytheme_reference_slug', __('References base', 'txtdomain'), 'mytest_reference_slug_output', 'permalink', 'optional');\n});<\/code><\/pre>\n<p>Inst\u00e4llning av argument fyra av <code>[add_settings_field](https:\/\/developer.wordpress.org\/reference\/functions\/add_settings_field\/)()<\/code>till <code>'permalink'<\/code>s\u00e4ger \u00e5t WordPress att l\u00e4gga till inst\u00e4llningen p\u00e5 sidan Inst\u00e4llningar f\u00f6r Permalinks. Argument nummer tre \u00e4r funktionen WordPress ska k\u00f6ra n\u00e4r inst\u00e4llningen matas ut \u2013 en funktion vi definierar h\u00e4rn\u00e4st (utanf\u00f6r den fasta funktionen):<\/p>\n<pre><code>function mytest_reference_slug_output() {\n    ?&gt;\n    &lt;input name=\"mytheme_reference_slug\" type=\"text\" class=\"regular-text code\" value=\"&lt;?php echo esc_attr(get_option('mytheme_reference_slug')); ?&gt;\" placeholder=\"&lt;?php echo 'reference'; ?&gt;\" \/&gt;\n    &lt;?php\n}<\/code><\/pre>\n<p>I den h\u00e4r funktionen matar vi helt enkelt ut en grundl\u00e4ggande formtext <code>&lt;input&gt;<\/code>. F\u00f6r dess <code>value<\/code>attribut h\u00e4mtar vi v\u00e4rdet f\u00f6r inst\u00e4llningen med hj\u00e4lp av <code>[get_option](https:\/\/developer.wordpress.org\/reference\/functions\/get_option\/)()<\/code>. Attributet <code>placeholder<\/code>\u00e4r valfritt, men det \u00e4r en god praxis att l\u00e4gga in din standardsnigelbas s\u00e5 att temaanv\u00e4ndaren vet om de vill \u00e4ndra dess v\u00e4rde eller inte.<\/p>\n<p>Om du sparar din kod och g\u00e5r till din WordPress Permalinks-sida nu, b\u00f6r du se ditt f\u00e4lt i slutet:<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-152961-61e500224b55a.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-152961-61e500224b55a.png\" alt=\"L\u00e4gg till en anpassad permal\u00e4nkinst\u00e4llning f\u00f6r din anpassade inl\u00e4ggstyp i WordPress\" ><\/a><\/p>\n<p>F\u00f6r tillf\u00e4llet sparar inte inst\u00e4llningen sitt v\u00e4rde, det \u00e4r n\u00e4sta steg.<\/p>\n<p>Vi m\u00e5ste l\u00e4gga till en annan funktion kopplad till <code>admin_init<\/code>som kontrollerar om v\u00e5r inst\u00e4llning skickades i form av permal\u00e4nkstruktur eller inte. Och i s\u00e5 fall b\u00f6r den sparas med <code>[update_option](https:\/\/developer.wordpress.org\/reference\/functions\/update_option\/)()<\/code>.<\/p>\n<pre><code>add_action('admin_init', function() {\n    if (isset($_POST['permalink_structure'])) {\n        update_option('mytheme_reference_slug', trim($_POST['mytheme_reference_slug']));\n    }\n});<\/code><\/pre>\n<p>N\u00e4r du sparar Permalinks-inst\u00e4llningar skickas ett formul\u00e4r in, s\u00e5 att vi kan f\u00e5 v\u00e4rdena via PHPs <code>$_POST<\/code>globala variabel. De inl\u00e4mnade v\u00e4rdena fr\u00e5n formul\u00e4ret lagras som en array med ing\u00e5ngens namnattribut som nycklar. I v\u00e5rt fall s\u00e4tter vi ett namnattribut &#8217; <code>mytheme_reference_slug<\/code>&#8217; p\u00e5 v\u00e5r inmatning, s\u00e5 att vi kan komma \u00e5t det inl\u00e4mnade v\u00e4rdet med <code>$_POST['mytheme_reference_slug']<\/code>.<\/p>\n<p>Nu b\u00f6r inst\u00e4llningen fungera fullt ut p\u00e5 sidan Permal\u00e4nkinst\u00e4llningar. Den sista delen \u00e4r att f\u00e4sta v\u00e4rdet av denna inst\u00e4llning p\u00e5 v\u00e5r anpassade inl\u00e4ggstyp.<\/p>\n<h2>Anv\u00e4nd v\u00e5r inst\u00e4llning f\u00f6r att g\u00f6ra v\u00e5r anpassade inl\u00e4ggstyp<\/h2>\n<p>F\u00f6r att f\u00e5 v\u00e5r anpassade inl\u00e4ggstyp att anv\u00e4nda det anpassade v\u00e4rdet f\u00f6r v\u00e5r inst\u00e4llning, \u00e5terg\u00e5r vi till <code>register_post_type()<\/code>funktionsanropet och \u00e4ndrar <code>rewrite<\/code>argumentet till n\u00e5got s\u00e5 h\u00e4r:<\/p>\n<pre><code>'rewrite' =&gt; [\n    'slug' =&gt; (!empty(get_option('mytheme_reference_slug')))? get_option('mytheme_reference_slug'): 'reference',\n    'with_front' =&gt; false\n]<\/code><\/pre>\n<p>Allt vi g\u00f6r h\u00e4r \u00e4r att h\u00e4mta v\u00e4rdet av v\u00e5rt nya alternativ. Om den \u00e4r tom kommer standard (<code>'reference'<\/code>) att anv\u00e4ndas.<\/p>\n<p>Och det \u00e4r allt! Nu kommer din anpassade inl\u00e4ggstyp att anv\u00e4nda vilken slugbas som \u00e4r inst\u00e4lld p\u00e5 sidan med Permalinks-inst\u00e4llningar. Du kan l\u00e4gga till fler inst\u00e4llningar p\u00e5 samma s\u00e4tt, till exempel f\u00f6r anpassade taxonomier.<\/p>\n<h2>Hela koden<\/h2>\n<p>Alla tillsammans nu.<\/p>\n<pre><code>\/\/ Register custom post type\nadd_action('init', function() {\n    register_post_type('reference', [\n        'label' =&gt; __('References', 'txtdomain'),\n        'public' =&gt; true,\n        'menu_position' =&gt; 5,\n        'menu_icon' =&gt; 'dashicons-book',\n        'supports' =&gt; ['title', 'editor', 'thumbnail', 'author', 'custom-fields', 'revisions'],\n        'show_in_rest' =&gt; true,\n        'rewrite' =&gt; [\n            'slug' =&gt; (!empty(get_option('mytheme_reference_slug')))? get_option('mytheme_reference_slug'): 'reference',\n            'with_front' =&gt; false\n        ],\n        'labels' =&gt; [\n            'singular_name' =&gt; __('Reference', 'txtdomain'),\n            'add_new_item' =&gt; __('Add new reference', 'txtdomain'),\n            'new_item' =&gt; __('New reference', 'txtdomain'),\n            'view_item' =&gt; __('View reference', 'txtdomain'),\n            'not_found' =&gt; __('No references found', 'txtdomain'),\n            'not_found_in_trash' =&gt; __('No references found in trash', 'txtdomain'),\n            'all_items' =&gt; __('All references', 'txtdomain'),\n            'insert_into_item' =&gt; __('Insert into reference', 'txtdomain')\n        ],      \n    ]);\n});\n\u00a0\n\/\/ Add setting\nadd_action('admin_init', function() {\n    add_settings_field('mytheme_reference_slug', __('References base', 'txtdomain'), 'mytest_reference_slug_output', 'permalink', 'optional');\n});\n\u00a0\n\/\/ Setting output\nfunction mytest_reference_slug_output() {\n    ?&gt;\n    &lt;input name=\"mytheme_reference_slug\" type=\"text\" class=\"regular-text code\" value=\"&lt;?php echo esc_attr(get_option('mytheme_reference_slug')); ?&gt;\" placeholder=\"&lt;?php echo 'reference'; ?&gt;\" \/&gt;\n    &lt;?php\n}\n\u00a0\n\/\/ Save setting\nadd_action('admin_init', function() {\n    if (isset($_POST['permalink_structure'])) {\n        update_option('mytheme_reference_slug', trim($_POST['mytheme_reference_slug']));\n    }\n});<\/code><\/pre>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Inspelningsk\u00e4lla:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/awhitepixel.com\" class=\"external external_icon\">awhitepixel.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Det h\u00e4r \u00e4r en handledning om hur man l\u00e4gger till en anpassad inst\u00e4llning p\u00e5 WordPresss adminsida &#8221;Inst\u00e4llningar > Permal\u00e4nkar&#8221; f\u00f6r att definiera slug till din anpassade inl\u00e4ggstyp.<\/p>\n","protected":false},"author":1,"featured_media":152962,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[901,724,838,848,901,1110,807,807,838,848,724,868,868],"tags":[1173],"class_list":{"0":"post-233521","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","6":"hentry","7":"category-koda","8":"category-utvecklaren","9":"category-guide-foer-nyboerjare","10":"category-handledningar","12":"category-n-a","13":"category-php-9","18":"category-wordpress-9","20":"tag-affiai-sv"},"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts\/233521","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/comments?post=233521"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts\/233521\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/media\/152962"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/media?parent=233521"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/categories?post=233521"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/tags?post=233521"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}