{"id":233542,"date":"2023-02-16T09:44:00","date_gmt":"2023-02-16T06:44:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=233542"},"modified":"2022-11-11T00:15:42","modified_gmt":"2022-11-10T21:15:42","slug":"dodaj-niestandardowe-ustawienie-linku-bezposredniego-dla-niestandardowego-typu-postu-w-wordpress","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/pl\/dodaj-niestandardowe-ustawienie-linku-bezposredniego-dla-niestandardowego-typu-postu-w-wordpress\/","title":{"rendered":"Dodaj niestandardowe ustawienie linku bezpo\u015bredniego dla niestandardowego typu postu w WordPress"},"content":{"rendered":"\n<p>To jest samouczek, jak doda\u0107 niestandardowe ustawienie do strony administratora WordPressa \u201eUstawienia &gt; Permalinki&quot;, aby zdefiniowa\u0107 slug dla niestandardowego typu postu. Je\u015bli tworzysz motyw lub wtyczk\u0119 dla innych, kt\u00f3ra ma wbudowany niestandardowy typ postu, dodanie tego ustawienia zostanie docenione przez u\u017cytkownika za umo\u017cliwienie mu decydowania o strukturze adresu URL niestandardowego typu posta.<\/p>\n<p>Nie b\u0119d\u0119 szczeg\u00f3\u0142owo omawia\u0142, jak doda\u0107 niestandardowy typ posta; je\u015bli nie masz pewno\u015bci, polecam przyjrze\u0107 si\u0119 <a href=\"https:\/\/awhitepixel.com\/blog\/how-to-create-custom-post-types-and-custom-taxonomies\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">, jak doda\u0107 niestandardowy typ posta<\/a>.<\/p>\n<p>Za\u0142\u00f3\u017cmy, \u017ce masz kod do zarejestrowania niestandardowego typu postu w nast\u0119puj\u0105cy spos\u00f3b:<\/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>Interesuje nas <code>rewrite<\/code>argument. W tym miejscu definiujemy, jaki slug otrzyma dany post przed wszystkimi jego postami. Tw\u00f3j kod do rejestracji niestandardowego typu postu mo\u017ce by\u0107 nieco inny, np. bez \u201e <code>with_front<\/code>&#8222;, ale to, co nas tutaj interesuje, to \u201e <code>slug<\/code>&#8222;:<\/p>\n<pre><code>'rewrite' =&gt; [\n    'slug' =&gt; 'reference',\n    'with_front' =&gt; false\n]<\/code><\/pre>\n<p>Za pomoc\u0105 tego kodu praktycznie na sta\u0142e ustalasz, jaki b\u0119dzie \u015blimak permalink posta. Typ postu dla referencji mo\u017ce by\u0107 u\u017cywany dla wielu typ\u00f3w tre\u015bci i u\u017cytkownik\u00f3w motyw\u00f3w; np. projekt, portfolio, referencje klient\u00f3w, referencje firm itp. Aby uczyni\u0107 tw\u00f3j motyw elastycznym, mo\u017cesz pozwoli\u0107 u\u017cytkownikowi motywu na samodzielne decydowanie o rodzaju postu.<\/p>\n<p>Zobaczmy wi\u0119c, jak to zrobi\u0107!<\/p>\n<h2>Dodawanie i zapisywanie pola<\/h2>\n<p>Korzystanie z interfejsu API ustawie\u0144 WordPressa upraszcza to nieco dla nas. Wszystko, czego potrzebujemy, to doda\u0107 pole ustawie\u0144 i powiedzie\u0107 WordPressowi, na kt\u00f3rej stronie administratora ma by\u0107 wy\u015bwietlany \u2013 w naszym przypadku na stronie ustawie\u0144 permalink\u00f3w. Pami\u0119taj, \u017ce musimy napisa\u0107 funkcj\u0119, kt\u00f3ra faktycznie zapisuje r\u00f3wnie\u017c warto\u015b\u0107, co zrobimy na ko\u0144cu.<\/p>\n<p>Pod\u0142\u0105czamy nasz\u0105 funkcj\u0119 do <code>admin_init<\/code>haka i rejestrujemy nasze ustawienie. Kiedy rejestrujemy ustawienie, okre\u015blamy, jak\u0105 funkcj\u0119 ma ona uruchomi\u0107 w celu wyprowadzenia ustawienia:<\/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>Ustawienie czwartego argumentu <code>[add_settings_field](https:\/\/developer.wordpress.org\/reference\/functions\/add_settings_field\/)()<\/code>na <code>'permalink'<\/code>m\u00f3wi WordPressowi, aby doda\u0142 to ustawienie do strony Ustawienia permalink\u00f3w. Argument numer trzy to funkcja, kt\u00f3r\u0105 WordPress powinien uruchomi\u0107 podczas wyprowadzania ustawienia \u2013 funkcja, kt\u00f3r\u0105 definiujemy nast\u0119pnie (poza funkcj\u0105 podpi\u0119t\u0105):<\/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>W tej funkcji po prostu wypisujemy podstawowy tekst formularza <code>&lt;input&gt;<\/code>. Dla jego <code>value<\/code>atrybutu pobieramy warto\u015b\u0107 ustawienia za pomoc\u0105 <code>[get_option](https:\/\/developer.wordpress.org\/reference\/functions\/get_option\/)()<\/code>. Atrybut jest <code>placeholder<\/code>opcjonalny, ale dobr\u0105 praktyk\u0105 jest umieszczenie domy\u015blnej bazy informacji o \u015blimaku, aby u\u017cytkownik motywu wiedzia\u0142, czy chce zmieni\u0107 jego warto\u015b\u0107, czy nie.<\/p>\n<p>Je\u015bli zapiszesz kod i przejdziesz teraz na stron\u0119 Permalink\u00f3w WordPress, powiniene\u015b zobaczy\u0107 swoje pole na samym ko\u0144cu:<\/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=\"Dodaj niestandardowe ustawienie linku bezpo\u015bredniego dla niestandardowego typu postu w WordPress\" ><\/a><\/p>\n<p>W tej chwili ustawienie nie zapisuje swojej warto\u015bci, to kolejny krok.<\/p>\n<p>Musimy doda\u0107 kolejn\u0105 pod\u0142\u0105czon\u0105 funkcj\u0119 <code>admin_init<\/code>, kt\u00f3ra sprawdza, czy nasze ustawienie zosta\u0142o przes\u0142ane w formie struktury permalink. A je\u015bli tak, nale\u017cy go zapisa\u0107 za pomoc\u0105 <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>Podczas zapisywania ustawie\u0144 Permalink\u00f3w formularz jest przesy\u0142any, dzi\u0119ki czemu jeste\u015bmy w stanie uzyska\u0107 warto\u015bci poprzez <code>$_POST<\/code>zmienn\u0105 globaln\u0105 PHP. Przes\u0142ane warto\u015bci z formularza s\u0105 przechowywane jako tablica z atrybutami nazwy danych wej\u015bciowych jako kluczami. W naszym przypadku ustawiamy atrybut nazwy &#8217; <code>mytheme_reference_slug<\/code>&#8217; na naszych danych wej\u015bciowych, dzi\u0119ki czemu mo\u017cemy uzyska\u0107 dost\u0119p do przes\u0142anej warto\u015bci za pomoc\u0105 <code>$_POST['mytheme_reference_slug']<\/code>.<\/p>\n<p>Teraz ustawienie powinno dzia\u0142a\u0107 w pe\u0142ni na stronie ustawie\u0144 Permalink. Ostatni\u0105 cz\u0119\u015bci\u0105 jest przypisanie warto\u015bci tego ustawienia do naszego niestandardowego typu posta.<\/p>\n<h2>Sprawiaj\u0105c, \u017ce nasz niestandardowy typ posta korzysta z naszych ustawie\u0144<\/h2>\n<p>Aby nasz niestandardowy typ postu u\u017cywa\u0142 niestandardowej warto\u015bci naszego ustawienia, wracamy do <code>register_post_type()<\/code>wywo\u0142ania funkcji i modyfikujemy <code>rewrite<\/code>argument w taki spos\u00f3b:<\/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>Wszystko, co tutaj robimy, to pobieranie warto\u015bci naszej nowej opcji. Je\u015bli jest pusta <code>'reference'<\/code>, zostanie u\u017cyta domy\u015blna ().<\/p>\n<p>I to wszystko! Teraz Tw\u00f3j niestandardowy typ postu b\u0119dzie u\u017cywa\u0142 dowolnej bazy informacji o slugach ustawionej na stronie Ustawienia Permalink\u00f3w. W ten sam spos\u00f3b mo\u017cesz doda\u0107 wi\u0119cej ustawie\u0144, na przyk\u0142ad dla niestandardowych taksonomii.<\/p>\n<h2>Pe\u0142ny kod<\/h2>\n<p>Teraz wszyscy razem.<\/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\">\u0179r\u00f3d\u0142o nagrywania:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/awhitepixel.com\" class=\"external external_icon\">awhitepixel.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>To jest samouczek, jak doda\u0107 niestandardowe ustawienie do strony administratora WordPressa \u201eUstawienia > Permalinki\u201d w celu zdefiniowania \u015blimaka w niestandardowym typie posta.<\/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":[897,721,721,897,1110,805,805,836,836,845,845,866,866],"tags":[1169],"class_list":{"0":"post-233542","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","6":"hentry","7":"category-kod","8":"category-deweloper","11":"category-n-a","12":"category-php-7","14":"category-przewodnik-dla-poczatkujacych","16":"category-samouczki","18":"category-wordpress-7","20":"tag-affiai-pl"},"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts\/233542","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/comments?post=233542"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts\/233542\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/media\/152962"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/media?parent=233542"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/categories?post=233542"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/tags?post=233542"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}