{"id":233936,"date":"2023-02-25T10:59:00","date_gmt":"2023-02-25T07:59:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=233936"},"modified":"2022-11-11T13:17:08","modified_gmt":"2022-11-11T10:17:08","slug":"samouczek-motywu-wordpress-dla-poczatkujacych-czesc-10-dodawanie-wiekszej-liczby-szablonow","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/pl\/samouczek-motywu-wordpress-dla-poczatkujacych-czesc-10-dodawanie-wiekszej-liczby-szablonow\/","title":{"rendered":"Samouczek motywu WordPress dla pocz\u0105tkuj\u0105cych \u2013 cz\u0119\u015b\u0107 10: Dodawanie wi\u0119kszej liczby szablon\u00f3w"},"content":{"rendered":"\n<p>W tej lekcji samouczka motywu WordPress dla pocz\u0105tkuj\u0105cych zag\u0142\u0119bimy si\u0119 w szablony. Dowiemy si\u0119 o cz\u0119\u015bciach szablonu i zaimplementujemy go do ponownego u\u017cycia. Do naszego motywu dodamy wi\u0119cej domy\u015blnych szablon\u00f3w WordPressa.<\/p>\n<p>Ale zanim zaczniemy dodawa\u0107 wi\u0119cej plik\u00f3w szablon\u00f3w, musimy wiedzie\u0107, dlaczego powinni\u015bmy zawraca\u0107 sobie <strong>g\u0142ow\u0119 cz\u0119\u015bciami szablon\u00f3w<\/strong>.<\/p>\n<h2>Cz\u0119\u015bci szablonu: bardziej elastyczne bloki konstrukcyjne<\/h2>\n<p>Cz\u0119\u015bci szablonu dzia\u0142aj\u0105 dok\u0142adnie tak, jak <code>get_header()<\/code>i o <code>get_footer()<\/code>kt\u00f3rych <a href=\"http:\/\/awhitepixel.com\/blog\/wordpress-theme-tutorial-for-beginners-part-2-building-blocks\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">dowiedzieli\u015bmy si\u0119 w cz\u0119\u015bci 2<\/a>, ale nie ograniczaj\u0105 si\u0119 do tych plik\u00f3w. Mo\u017cesz u\u017cy\u0107 cz\u0119\u015bci szablonu dla dowolnego pliku!<\/p>\n<p>Motywy zwykle u\u017cywaj\u0105 cz\u0119\u015bci szablonu dla post\u00f3w w p\u0119tli. Zazwyczaj wiele szablon\u00f3w, takich jak kategoria, archiwum i wyniki wyszukiwania, zwykle wy\u015bwietla ka\u017cdy post w p\u0119tli w ten sam spos\u00f3b. Dlatego bardzo dobrym pomys\u0142em jest rozdzielenie wyj\u015bcia post-p\u0119tli w jeden plik. W ten spos\u00f3b nie musisz powtarza\u0107 tego w ka\u017cdym szablonie.<\/p>\n<p>Zamie\u0144my cz\u0119\u015b\u0107 naszego istniej\u0105cego kodu na cz\u0119\u015bci szablonu, zanim zaczniemy tworzy\u0107 wi\u0119cej szablon\u00f3w!<\/p>\n<h2>Tworzenie cz\u0119\u015bci szablonu p\u0119tli post<\/h2>\n<p>Utw\u00f3rz nowy pusty plik w naszym folderze motywu; o nazwie <code>content-loop.php<\/code>. Mo\u017cesz dowolnie nazwa\u0107 cz\u0119\u015bci szablonu. Ale nie mo\u017cesz nazwa\u0107 ich tak samo, jak \u017caden z <a href=\"https:\/\/codex.wordpress.org\/File:Template_Hierarchy.png#file\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">szablon\u00f3w zdefiniowanych przez WordPress<\/a>. W naszym <code>index.php<\/code>zlokalizuj wszystko, co masz w p\u0119tli, wytnij i wklej do \u015brodka <code>content-loop.php<\/code>.<\/p>\n<p>Wewn\u0105trz pustej p\u0119tli w <code>index.php<\/code>, u\u017cyj wywo\u0142ania funkcji <code>get_template_part()<\/code>i zdefiniuj plik cz\u0119\u015bci szablonu jako parametr (bez <code>.php<\/code>rozszerzenia). Tak powinno wygl\u0105da\u0107 w obu plikach:<\/p>\n<pre><code>...\n    while (have_posts()): the_post(); \n        get_template_part('content-loop');\n    endwhile;\n    the_posts_pagination();\n...<\/code><\/pre>\n<pre><code>&lt;article &lt;?php post_class(); ?&gt;&gt;\n    &lt;h2&gt;&lt;a href=\"&lt;?php the_permalink(); ?&gt;\" title=\"&lt;?php the_title(); ?&gt;\"&gt;&lt;?php the_title(); ?&gt;&lt;\/a&gt;&lt;\/h2&gt;\n    &lt;?php if (has_post_thumbnail()) {\n        the_post_thumbnail();\n    } ?&gt;\n    &lt;?php the_excerpt(); ?&gt;\n    &lt;?php the_category(); ?&gt;\n&lt;\/article&gt;<\/code><\/pre>\n<p>Je\u015bli od\u015bwie\u017cysz swoj\u0105 stron\u0119 g\u0142\u00f3wn\u0105, nie powiniene\u015b zobaczy\u0107 absolutnie \u017cadnej r\u00f3\u017cnicy.<\/p>\n<p>\u015awietny! Teraz, gdy nasz <code>index.php<\/code>jest \u0142adny i czysty, mo\u017cemy u\u017cy\u0107 go jako podstawy do powielenia w wi\u0119kszej liczbie szablon\u00f3w. Poni\u017cej om\u00f3wi\u0119, jak doda\u0107 szablon kategorii i szablon wynik\u00f3w wyszukiwania, ale zach\u0119cam do tworzenia wi\u0119kszej liczby szablon\u00f3w, aby mie\u0107 wi\u0119ksz\u0105 kontrol\u0119 nad projektem swojego motywu.<\/p>\n<h2>Dodawanie szablonu kategorii<\/h2>\n<p>Je\u015bli odwo\u0142asz si\u0119 do <a href=\"https:\/\/codex.wordpress.org\/File:Template_Hierarchy.png#file\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">hierarchii szablon\u00f3w WordPressa<\/a>, zobaczysz, \u017ce dla kategorii post\u00f3w WordPress b\u0119dzie szuka\u0107 szablonu o nazwie <code>category.php<\/code>. Najpierw to stworzymy.<\/p>\n<p>W folderze motywu utw\u00f3rz kopi\u0119 <code>index.php<\/code>pliku i zmie\u0144 nazw\u0119 kopii <code>category.php<\/code>.<\/p>\n<p>I to wszystko. W zasadzie gotowe\u2026!<\/p>\n<p>Dodamy jednak jeden szczeg\u00f3\u0142; chcemy pokaza\u0107 tytu\u0142, kt\u00f3ry m\u00f3wi nam, \u017ce jeste\u015bmy na stronie kategorii dla post\u00f3w w kategorii o nazwie X. WordPress ma do tego funkcj\u0119, kt\u00f3rej mo\u017cesz u\u017cy\u0107 we wszystkich szablonach archiw\u00f3w (kategoria, tagi, archiwa dat), <code>the_archive_title<\/code>. Dodajmy to przed p\u0119tl\u0105, wewn\u0105trz <code>&lt;h1&gt;<\/code>tagu.<\/p>\n<pre><code>&lt;?php get_header(); ?&gt;\n&lt;h1&gt;&lt;?php the_archive_title(); ?&gt;&lt;\/h1&gt;\n&lt;?php\nif (have_posts()) {\n...<\/code><\/pre>\n<p>Je\u015bli przegl\u0105dasz stron\u0119 kategorii post\u00f3w, powiniene\u015b zobaczy\u0107 co\u015b takiego, z tytu\u0142em archiwum \u201eKategoria:&quot;. PS: Je\u015bli chcesz zmieni\u0107 dane wyj\u015bciowe tytu\u0142u archiwum (na przyk\u0142ad nie wy\u015bwietlaj\u0105c \u201eKategoria:&#8221;), mo\u017cesz doda\u0107 filtr do <a href=\"https:\/\/developer.wordpress.org\/reference\/hooks\/get_the_archive_title\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">get_the_archive_title<\/a>. Strona dokumentacji pokazuje \u015bwietny przyk\u0142ad, jak to zrobi\u0107.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-151635-61e4cd7239f1b.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-151635-61e4cd7239f1b.png\" alt=\"Samouczek motywu WordPress dla pocz\u0105tkuj\u0105cych \u2013 cz\u0119\u015b\u0107 10: Dodawanie wi\u0119kszej liczby szablon\u00f3w\" ><\/a><\/p>\n<p>C\u00f3\u017c, to by\u0142o \u0142atwe! Zajmijmy si\u0119 nast\u0119pnym szablonem wynik\u00f3w wyszukiwania.<\/p>\n<h2>Dodawanie szablonu wynik\u00f3w wyszukiwania<\/h2>\n<p>Procedura jest dok\u0142adnie taka sama, jak w przypadku szablon\u00f3w kategorii. Tym razem utw\u00f3rz kopi\u0119 <code>category.php<\/code>i zmie\u0144 nazw\u0119 kopii na <code>search.php<\/code>.<\/p>\n<p>Wszystko, co musimy naprawi\u0107, to tytu\u0142. Funkcja tytu\u0142u archiwum, kt\u00f3rej u\u017cyli\u015bmy w szablonie kategorii, niestety nie dzia\u0142a zbyt dobrze dla szablonu wynik\u00f3w wyszukiwania. W rzeczywisto\u015bci w WordPressie nie ma prostej funkcji, kt\u00f3ra wy\u015bwietla dla nas tytu\u0142.<\/p>\n<p>Ale mo\u017cemy \u0142atwo zrobi\u0107 to sami, a jednocze\u015bnie poka\u017c\u0119, jak wyprowadzi\u0107 zmienn\u0105 dynamiczn\u0105 i nadal zachowa\u0107 mo\u017cliwo\u015b\u0107 t\u0142umaczenia tekstu.<\/p>\n<p>PHP ma dwie przydatne funkcje <code>printf()<\/code>i <code>sprintf()<\/code>. Robi\u0105 to samo, z wyj\u0105tkiem tego, \u017ce <code>printf<\/code>wyprowadza je (jak echo) i <code>sprintf<\/code>zwraca, wi\u0119c mo\u017cemy je przechowywa\u0107 w zmiennej. Po umieszczeniu tekstu jako pierwszych parametr\u00f3w, mo\u017cemy doda\u0107 zmienne dynamiczne jako argumenty, kt\u00f3re s\u0105 nast\u0119pnie wstrzykiwane do tekstu. W ich wn\u0119trzu mo\u017cemy u\u017cy\u0107 funkcji t\u0142umaczenia tekstu <code>__()<\/code>oraz <code>_e()<\/code>. Polecam przeczyta\u0107 troch\u0119 o tym, jak dzia\u0142a <a href=\"https:\/\/www.php.net\/manual\/en\/function.printf.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">printf<\/a> lub <a href=\"https:\/\/www.php.net\/manual\/en\/function.sprintf.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">sprintf<\/a>, poniewa\u017c nie b\u0119d\u0119 tu wchodzi\u0107 w szczeg\u00f3\u0142y.<\/p>\n<p>WordPress oferuje prost\u0105 funkcj\u0119, aby uzyska\u0107 wyszukiwany ci\u0105g; <code>get_search_query()<\/code>. Powiedziawszy to, zast\u0105pmy t\u0105 funkcj\u0105 tytu\u0142 archiwum;<\/p>\n<pre><code>&lt;h1&gt;&lt;?php printf(__('Search: %s', 'wptutorial'), get_search_query()); ?&gt;&lt;\/h1&gt;<\/code><\/pre>\n<p>To, co robi powy\u017cszy kod, jest od \u015brodka; zdefiniowanie mo\u017cliwego do przet\u0142umaczenia tekstu \u201eSzukaj: %s&#8221;, kt\u00f3ry jest umieszczany wewn\u0105trz a <code>printf<\/code>, kt\u00f3ry odzwierciedla ci\u0105g i zast\u0119puje sta\u0142\u0105 ci\u0105gu (<code>%s<\/code>) drugim argumentem; czyli <code>get_search_query()<\/code>.<\/p>\n<p>W rezultacie, wyszukuj\u0105c \u201eer&#8221;, otrzymujemy taki tytu\u0142:<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-151635-61e4cd7331b74.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-151635-61e4cd7331b74.png\" alt=\"Samouczek motywu WordPress dla pocz\u0105tkuj\u0105cych \u2013 cz\u0119\u015b\u0107 10: Dodawanie wi\u0119kszej liczby szablon\u00f3w\" ><\/a><\/p>\n<p>Mi\u0142y! Zrobiono kolejny szablon. Je\u015bli chodzi o ostatni\u0105 cz\u0119\u015b\u0107 tej lekcji, przejdziemy do naszego szablonu pojedynczego posta i dodamy co\u015b bardzo powszechnego w WordPress; szablon komentarzy.<\/p>\n<h2>Dodawanie szablonu komentarzy do pojedynczego posta<\/h2>\n<p>W naszym <code>single.php<\/code>, po wpisie, chcemy pokaza\u0107 komentarze. Komentarze powinny zawiera\u0107 list\u0119 poprzednich komentarzy oraz formularz dodawania nowego komentarza.<\/p>\n<p>Szablon komentarzy to plik szablonu, kt\u00f3ry mo\u017cesz doda\u0107 do swojego motywu, ale WordPress ma w\u0142asne domy\u015blne wyj\u015bcie szablonu komentarzy. Je\u015bli nie masz <code>comments.php<\/code>w swoim motywie, \u017c\u0105danie szablonu komentarzy zwr\u00f3ci dla niego domy\u015blne dane wyj\u015bciowe WordPressa. Oto, co zrobimy w tym samouczku.<\/p>\n<p>Chcemy wywo\u0142a\u0107 szablon komentarzy tylko wtedy, gdy wpis ma aktywowane komentarze (jest to ustawienie dla ka\u017cdego wpisu i globalne ustawienie witryny). Dodajemy wi\u0119c check if, aby sprawdzi\u0107, czy komentarze s\u0105 dozwolone za pomoc\u0105 <code>comments_open()<\/code>, a je\u015bli zwraca true, prosimy o szablon komentarzy za pomoc\u0105 <code>comments_template()<\/code>. Pami\u0119taj, \u017ce wszystko to musi si\u0119 wydarzy\u0107 w p\u0119tli. Doda\u0142em go po zako\u0144czeniu <code>&lt;\/article&gt;<\/code>, tu\u017c przed zamkni\u0119ciem p\u0119tli.<\/p>\n<pre><code>...\n        &lt;p&gt;&lt;?php _e('Author', 'wptutorial'); ?&gt;: &lt;?php the_author(); ?&gt;&lt;\/p&gt;\n    &lt;\/article&gt;\n    &lt;?php \n    if (comments_open()) {\n        comments_template();\n    }\n    endwhile;\n} else {\n    ?&gt;&lt;p&gt;&lt;?php _e('No posts, sorry.', 'wptutorial'); ?&gt;&lt;\/p&gt;&lt;?php\n...<\/code><\/pre>\n<p>Je\u015bli odwiedzasz pojedynczy post, kt\u00f3ry zezwala na komentarze (doda\u0142em komentarz tylko po to, aby pokaza\u0107 ci r\u00f3wnie\u017c list\u0119 komentarzy); otrzymasz ten pi\u0119kny (ahem) domy\u015blny szablon komentarzy:<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-151635-61e4cd7412986.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-151635-61e4cd7412986.png\" alt=\"Samouczek motywu WordPress dla pocz\u0105tkuj\u0105cych \u2013 cz\u0119\u015b\u0107 10: Dodawanie wi\u0119kszej liczby szablon\u00f3w\" ><\/a><\/p>\n<p>Teraz mo\u017cesz (i cz\u0119sto si\u0119 do tego zach\u0119ca) stworzy\u0107 w\u0142asny <code>comments.php<\/code>motyw, kt\u00f3ry nadpisze domy\u015blne wyj\u015bcie WordPressa. Nie zamierzam jednak tworzy\u0107 szablonu komentarzy w tym samouczku, poniewa\u017c domy\u015blne dane wyj\u015bciowe WordPressa dzia\u0142aj\u0105 dobrze, o ile odpowiednio je stylizujesz. Je\u015bli sprawdzisz kod HTML, dost\u0119pnych jest wiele opakowa\u0144 i klas.<\/p>\n<h2>Dokumentacja dotycz\u0105ca zastosowanych metod<\/h2>\n<ul>\n<li><a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/get_template_part\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">get_template_part<\/a><\/li>\n<li><a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/the_archive_title\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">tytu\u0142_archiwum<\/a><\/li>\n<li><a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/get_search_query\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">get_search_query<\/a><\/li>\n<li><a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/comments_open\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">komentarze_otwarte<\/a><\/li>\n<li><a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/comments_template\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">comments_template<\/a><\/li>\n<\/ul>\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>W tej lekcji dowiemy si\u0119 o cz\u0119\u015bciach szablon\u00f3w i stworzymy wi\u0119cej szablon\u00f3w do naszego motywu WordPress. Dodamy r\u00f3wnie\u017c szablon komentarzy do widoku pojedynczego posta.<\/p>\n","protected":false},"author":1,"featured_media":223663,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[588,721,516,919,897,913,1110,836,506,845,929,614,509,866,515],"tags":[1169],"class_list":["post-233936","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-code","category-deweloper","category-software-entwicklung","category-inny","category-kod","category-sonstig","category-n-a","category-przewodnik-dla-poczatkujacych","category-ratgeber-fuer-anfaenger","category-samouczki","category-tematy","category-themen","category-tutorials","category-wordpress-7","category-wordpress","tag-affiai-pl"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts\/233936","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=233936"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts\/233936\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/media\/223663"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/media?parent=233936"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/categories?post=233936"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/tags?post=233936"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}