{"id":970,"date":"2013-08-08T05:56:51","date_gmt":"2013-08-08T05:56:51","guid":{"rendered":"http:\/\/musilda.cz\/?p=970"},"modified":"2013-08-08T05:56:51","modified_gmt":"2013-08-08T05:56:51","slug":"co-znamena-loop-ve-wordpress-sablone","status":"publish","type":"post","link":"https:\/\/affinite.io\/cs\/co-znamena-loop-ve-wordpress-sablone\/","title":{"rendered":"Co znamen\u00e1 Loop ve WordPress \u0161ablon\u011b"},"content":{"rendered":"<p>Pokud jste se setkali p\u0159i pro\u010d\u00edt\u00e1n\u00ed Codexu, nebo n\u011bkter\u00e9ho z n\u00e1vod\u016f pro WordPress s pojmem Loop a chcete porozum\u011bt, co tento v\u00fdraz znamen\u00e1, je tento \u010dl\u00e1nek ur\u010den v\u00e1m. Loop je jedn\u00edm ze z\u00e1kladn\u00edch kamen\u016f WordPress \u0161ablony a d\u00e1 se \u0159\u00edci, \u017ee bez n\u011bj by nebyla pr\u00e1ce s t\u00edmto redak\u010dn\u00edm syst\u00e9mem tak jednoduch\u00e1.<!--more--><\/p>\n<p>Jednodu\u0161e \u0159e\u010deno, Loop je smy\u010dka, pomoc\u00ed kter\u00e9 se vypisuje p\u0159\u00edslu\u0161n\u00fd obsah.<\/p>\n<p>WordPress postupuje n\u00e1sleduj\u00edc\u00edm zp\u016fsobem:<\/p>\n<ol>\n<li>Definuj co chce\u0161 zobrazit<\/li>\n<li>Za\u010d\u00e1tek loopu<\/li>\n<li>V\u00fdpis obsahu, kter\u00fd chceme zobrazit<\/li>\n<li>Ukon\u010den\u00ed loopu<\/li>\n<\/ol>\n<p>Pro loop, nebo smy\u010dku, \u010di jakkoli to budeme naz\u00fdvat m\u00e1 WordPress funkce, kter\u00e9 se daj\u00ed pou\u017e\u00edt uvnit\u0159 loop, ale ne mimo n\u011bj. Pokud nap\u0159\u00edklad pou\u017eijete the_title() mimo smy\u010dku, nezobraz\u00ed se v\u00e1m nic, mus\u00edte pou\u017e\u00edt <a href=\"http:\/\/musilda.cz\/funkce-single_post_title\/\" target=\"_blank\" rel=\"noopener\">single_post_title<\/a>.<\/p>\n<h2>Z\u00e1kladn\u00ed tvar loopu<\/h2>\n<p>S t\u00edmto z\u00e1pisem se z\u0159ejm\u011b setkal ka\u017ed\u00fd, kdo se pod\u00edval na zdrojov\u00e9 soubory \u0161ablony:<\/p>\n<pre lang=\"php\">\nif (have_post()): while: (have_post()): the_post():\nObsah, kter\u00fd se zobrazuje\nelse:\nText, kter\u00fd se zobraz\u00ed, pokud nen\u00ed obsah k vyps\u00e1n\u00ed\nendwhile;\nendif;\n<\/pre>\n<p>Ze z\u00e1pisu je z\u0159ejm\u00e9, jak to funguje, proto\u017ee pro ka\u017ed\u00fd definovan\u00fd soubor, jako jsou single.php, page.php, archive.php, nebo categories.php p\u0159iprav\u00ed WordPress jin\u00fd druh obsahu, nemus\u00edme pro tyto soubory loop nijak upravovat. Sta\u010d\u00ed pou\u017e\u00edt funkce ur\u010den\u00e9 pro v\u00fdpis obsahu uvnit\u0159 loopu.<\/p>\n<p>Rozd\u00edl mezi page.php a archive.php je v tom, \u017ee u page m\u00e1me pouze jeden titulek a jeden obsah, kde\u017eto u arch\u00edvu t\u011bch \u010dl\u00e1nku m\u016f\u017ee b\u00fdt i tis\u00edc a loop vyp\u00ed\u0161e \u010dl\u00e1nek a proto\u017ee je v arch\u00edvu dal\u0161\u00ed, vr\u00e1t\u00ed se zp\u011bt na za\u010d\u00e1tek a provede smy\u010dku znovu, tak dlouho, dokud bude co vypisovat. Samoz\u0159ejm\u011b pomoc\u00ed str\u00e1nkov\u00e1n\u00ed se d\u00e1 po\u010det proveden\u00fdch loop\u016f omezit t\u0159eba na 20.<\/p>\n<p>Pokud budeme tedy cht\u00edt vypsat \u010dl\u00e1nky z ur\u010dit\u00e9 kategorie, tak do souboru categories.php vlo\u017e\u00edme tento upraven\u00fd loop:<\/p>\n<pre lang=\"php\">\nif (have_post()): while: (have_post()): the_post(): ?&gt;\n<h2><\/h2>\n\n\n&lt;a href=&quot;\"&gt;Cel\u00fd \u010dl\u00e1nek<\/a>\n\n<h2>Nenalezeno<\/h2>\n<p>Bohu\u017eel jsme nena\u0161li to co hled\u00e1te.<\/p>\n&lt;?php endwhile;\nendif;\n<\/pre>\n<p>Pomoc\u00ed funkc\u00ed uvnit\u0159 loopu vyp\u00ed\u0161eme titulek, n\u00e1hledov\u00fd obr\u00e1zek, kr\u00e1tk\u00fd v\u00fdpis p\u0159\u00edsp\u011bvku a zobraz\u00edme odkaz na cel\u00fd \u010dl\u00e1nek. Vid\u00edte, jak je to snadn\u00e9.<\/p>\n<p>V loopu m\u016f\u017eete pou\u017e\u00edt funkce ur\u010den\u00e9 pro v\u00fdpis ur\u010dit\u00e9 \u010d\u00e1sti obsahu, ale i specifick\u00e9 podmi\u0148ovac\u00ed funkce. N\u011bkter\u00e9 z nich zde vyp\u00ed\u0161i:<\/p>\n<ul>\n<li>the_title() &#8211; titulek<\/li>\n<li>the_excerpt() &#8211; anotace obsahu<\/li>\n<li>the_content() &#8211; cel\u00fd obsah<\/li>\n<li>the_permalink() &#8211; odkaz na detail obsahu<\/li>\n<li>next_post_link() &#8211; dal\u0161\u00ed \u010dl\u00e1nek ve v\u00fdpise<\/li>\n<li>previous_post_link &#8211; p\u0159edchoz\u00ed \u010dl\u00e1nek<\/li>\n<li>the_author() &#8211; autor obsahu<\/li>\n<li>the_ID &#8211; id obsahu<\/li>\n<li>the_category() &#8211; kategorie, do kter\u00e9 je obsah za\u0159azen<\/li>\n<\/ul>\n<p>Podmi\u0148ovac\u00ed funkce:<\/p>\n<ul>\n<li>is_home()<\/li>\n<li>is_page()<\/li>\n<li>is_single<\/li>\n<li>is_admin<\/li>\n<li>is_search()<\/li>\n<li>is_author()<\/li>\n<\/ul>\n<p>Jedn\u00e1 se pouze o \u010d\u00e1st funkc\u00ed, kter\u00e9 m\u016f\u017eete pou\u017e\u00edt, pro kompletn\u00ed seznam doporu\u010duji Codex.<\/p>\n<h2>\u00dapravy loopu pomoc\u00ed WP_query, get_posts a query_posts<\/h2>\n<p>A nyn\u00ed se dost\u00e1v\u00e1me do zaj\u00edmav\u00e9 \u010d\u00e1sti \u010dl\u00e1nku. Pokud si tuto \u010d\u00e1st pe\u010dliv\u011b p\u0159e\u010dtete a dopln\u00edte znalosti z Codexu, tak budete schopni vy\u0159e\u0161it mnoho probl\u00e9m\u016f typu &#8211; pot\u0159ebuji vypsat \u010dl\u00e1nky z kategorie, podle autora, se\u0159azen\u00e9 dle abecedy, atd&#8230;<\/p>\n<p>V\u0161echny t\u0159i funkce umo\u017e\u0148uji manipulovat s definov\u00e1n\u00edm loopu a proto si vysv\u011btl\u00edme, kdy je vhodn\u00e9 jakou pou\u017e\u00edt.<\/p>\n<h2><\/h2>\n<p>Get_posts je funkce, kter\u00e1 vyp\u00ed\u0161e \u010dl\u00e1nky, dle p\u0159esn\u011b definovan\u00fdch argument\u016f. Jedn\u00e1 se o template tag, tak\u017ee se jedn\u00e1 pouze o v\u00fdpis \u010dl\u00e1nk\u016f dle parametr\u016f, funkce nijak nemanipuluje s defaultn\u00edm loopem, na rozd\u00edl od druh\u00fdch dvou funkc\u00ed. T\u00edm se dost\u00e1v\u00e1m k vyu\u017eit\u00ed funkce. Get_posts m\u016f\u017eete v podstat\u011b definovat kde chcete v \u0161ablon\u011b, nijak t\u00edm neovlivn\u00edte dal\u0161\u00ed v\u00fdpisy. Toto je pom\u011brn\u011b \u010dast\u00fd probl\u00e9m a get_posts je \u0159e\u0161en\u00edm.<\/p>\n<p>Pou\u017eit\u00ed:<\/p>\n<pre lang=\"php\">\n$posts_array = get_posts( $args );\n<\/pre>\n<p>Seznam argument\u016f:<\/p>\n<pre lang=\"php\">\n$args = array(\n\t'posts_per_page'   =&gt; 5,\n\t'offset'           =&gt; 0,\n\t'category'         =&gt; '',\n\t'orderby'          =&gt; 'post_date',\n\t'order'            =&gt; 'DESC',\n\t'include'          =&gt; '',\n\t'exclude'          =&gt; '',\n\t'meta_key'         =&gt; '',\n\t'meta_value'       =&gt; '',\n\t'post_type'        =&gt; 'post',\n\t'post_mime_type'   =&gt; '',\n\t'post_parent'      =&gt; '',\n\t'post_status'      =&gt; 'publish',\n\t'suppress_filters' =&gt; true );\n<\/pre>\n<p>\u010casto se m\u016f\u017eete setkat se z\u00e1pisem argument\u016f p\u0159\u00edmo v z\u00e1vork\u00e1ch, ale to je prost\u011b fujky a ned\u00e1 se v tom po\u0159\u00e1dn\u011b vyznat.<\/p>\n<p>P\u0159\u00edklad pou\u017eit\u00ed:<\/p>\n<pre lang=\"php\">\n$args= array(\n             'posts_per_page' =&gt; 5,\n             'category'       =&gt; 1\n);\n\n$myposts = get_posts( $args );\nforeach ( $myposts as $post ) : setup_postdata( $post ); ?&gt;\n<h2>&lt;a href=&quot;\"&gt;<\/a><\/h2>\n\n&lt;a href=&quot;\"&gt;Cel\u00fd \u010dl\u00e1nek<\/a>\n\n<\/pre>\n<p>Tento p\u0159\u00edklad vyp\u00ed\u0161e 5 posledn\u00edch \u010dl\u00e1nk\u016f z kategorie s ID 1.<\/p>\n<h2>Query_post<\/h2>\n<p>Query_post je funkce, kter\u00e1 je podobn\u00e1 get_posts, m\u00e1 podobn\u00e9, nebo stejn\u00e9 argumenty pro zobrazov\u00e1n\u00ed \u010dl\u00e1nk\u016f, rozd\u00edl je v tom, \u017ee query_post ji\u017e manipuluje se z\u00e1kladn\u00edm loopem, proto je t\u0159eba pou\u017e\u00edvat funkci wp_reset_query(), kter\u00e1 nastav\u00ed loop na defaultn\u00ed hodnotu. Pro p\u0159\u00edklad, chcete m\u00edt nad ka\u017edou str\u00e1nkou m\u00edt box s v\u00fdpisem posledn\u00edch t\u0159\u00ed \u010dl\u00e1nk\u016f. Pokud pou\u017eijete query_post, ovlivn\u00ed argumenty i v\u00fdpis str\u00e1nky a v\u00e1m se pak bude zobrazovat trochu n\u011bco jin\u00e9ho, ne\u017e jste m\u011bli v z\u00e1m\u011bru.<\/p>\n<p>Pou\u017eit\u00ed:<\/p>\n<pre lang=\"php\">\n$args = array(\n\t'cat'      =&gt; 2,\n\t'order'    =&gt; 'ASC'\n);\nquery_posts( $args );\nwhile ( have_posts() ) : the_post();\n<h2>&lt;a href=&quot;\"&gt;<\/a><\/h2>\n\n&lt;a href=&quot;\"&gt;Cel\u00fd \u010dl\u00e1nek<\/a>\nendwhile;\nwp_reset_query();\n<\/pre>\n<p>Takto pou\u017eit\u00e1 funkce v\u00e1m vyp\u00ed\u0161e v\u0161echny \u010dl\u00e1nky z kategorie s ID 2, se\u0159azen\u00e9 vzestupn\u011b. Jak vid\u00edte, na rozd\u00edl od get_posts neproch\u00e1z\u00edme pole $myposts, ale upravili jsme p\u0159\u00edmo v\u00fdpis loopu. Na konci jsme vr\u00e1tili v\u00fdchoz\u00ed hodnoty pomoc\u00ed wp_reset_query.<\/p>\n<h2>WP_query<\/h2>\n<p>WP_query je t\u0159\u00edda, pomoc\u00ed kter\u00e9 m\u016f\u017eete definovat v\u00fdpis obsahu v \u0161ablon\u011b. d\u00e1 se \u0159\u00edci, \u017ee pou\u017eit\u00ed je podobn\u00e9 query_posts, ale WP_query m\u00e1 mnoho argument\u016f, pomoc\u00ed kter\u00fdch zobraz\u00edte v\u0161e co budete cht\u00edt, od \u010dl\u00e1nk\u016f z kategorie, a\u017e po v\u00fdpis custom post type, dle taxonomies. P\u0159esto\u017ee, se mu\u017ee na prvn\u00ed pohled zd\u00e1t pr\u00e1ce s t\u0159\u00eddou slo\u017eit\u00e1, nen\u00ed tomu tak a z\u00e1kladn\u00ed pou\u017eit\u00ed je snadn\u00e9.<\/p>\n<p>P\u0159\u00edklad:<\/p>\n<pre lang=\"php\">\n$args = array(\n'post_type' =&gt; 'post',\n'cat' =&gt; 2\n);\n\n$query = new WP_Query( $args );\n\nif ( $the_query-&gt;have_posts() ) :\nwhile ( $the_query-&gt;have_posts() ) : $the_query-&gt;the_post(); ?&gt;\n<h1><\/h1>\n\n\n\n\n&gt;p&gt;Nenalezeno<\/p>\n\n\n<\/pre>\n<p>Jak vid\u00edte pou\u017eit\u00ed je t\u00e9m\u011b\u0159 identick\u00e9, jako query_posts, ale mo\u017enosti t\u0159\u00eddy jsou daleko v\u011bt\u0161\u00ed, viz <a href=\"http:\/\/codex.wordpress.org\/Class_Reference\/WP_Query\" target=\"_blank\" rel=\"noopener\">Codex<\/a>. J\u00e1 osobn\u011b query_posts v\u016fbec nepou\u017e\u00edv\u00e1m, proto\u017ee WP_query nab\u00edz\u00ed v\u011bt\u0161\u00ed mo\u017enosti.<\/p>\n<h2>Z\u00e1v\u011br<\/h2>\n<p>Nyn\u00ed ji\u017e m\u016f\u017eete upravovat v\u00fdpis obsahu v \u0161ablon\u011b jak budete pot\u0159ebovat a v\u011b\u0159te, \u017ee mnoho probl\u00e9m\u016f, na kter\u00e9 nar\u00e1\u017e\u00edm na diskuz\u00edch, nebo mne n\u011bkdo pros\u00ed o pomoc, se daj\u00ed vy\u0159e\u0161it pomoc\u00ed spr\u00e1vn\u00e9ho pou\u017eit\u00ed t\u011bchto dvou funkc\u00ed a jedn\u00e9 t\u0159\u00eddy.<br \/>\nD\u00edky get_posts lehce vytvo\u0159\u00edte v\u00fdpis posledn\u00edch \u010dl\u00e1nk\u016f z kategorie do sidebaru a pomoc\u00ed WP_query si z hlavn\u00ed strany m\u016f\u017eete klidn\u011b magaz\u00edn. <\/p>\n","protected":false},"excerpt":{"rendered":"<p>Pokud jste se setkali p\u0159i pro\u010d\u00edt\u00e1n\u00ed Codexu, nebo n\u011bkter\u00e9ho z n\u00e1vod\u016f pro WordPress s pojmem Loop a chcete porozum\u011bt, co tento v\u00fdraz znamen\u00e1, je tento \u010dl\u00e1nek ur\u010den v\u00e1m. Loop je jedn\u00edm ze z\u00e1kladn\u00edch kamen\u016f WordPress \u0161ablony a d\u00e1 se \u0159\u00edci, \u017ee bez n\u011bj by nebyla pr\u00e1ce s t\u00edmto redak\u010dn\u00edm syst\u00e9mem tak jednoduch\u00e1.<\/p>\n","protected":false},"author":1,"featured_media":8614,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_uag_custom_page_level_css":"","footnotes":""},"categories":[12,30],"tags":[173,229,314,546],"class_list":["post-970","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-navody","category-wordpress","tag-get_posts","tag-loop","tag-query","tag-wp_query"],"acf":[],"uagb_featured_image_src":{"full":["https:\/\/affinite.io\/cs\/wp-content\/uploads\/sites\/2\/2013\/08\/wordpress-loop.png",1200,800,false],"thumbnail":["https:\/\/affinite.io\/cs\/wp-content\/uploads\/sites\/2\/2013\/08\/wordpress-loop-150x150.png",150,150,true],"medium":["https:\/\/affinite.io\/cs\/wp-content\/uploads\/sites\/2\/2013\/08\/wordpress-loop-300x200.png",300,200,true],"medium_large":["https:\/\/affinite.io\/cs\/wp-content\/uploads\/sites\/2\/2013\/08\/wordpress-loop-768x512.png",640,427,true],"large":["https:\/\/affinite.io\/cs\/wp-content\/uploads\/sites\/2\/2013\/08\/wordpress-loop-1024x683.png",640,427,true],"1536x1536":["https:\/\/affinite.io\/cs\/wp-content\/uploads\/sites\/2\/2013\/08\/wordpress-loop.png",1200,800,false],"2048x2048":["https:\/\/affinite.io\/cs\/wp-content\/uploads\/sites\/2\/2013\/08\/wordpress-loop.png",1200,800,false],"archive-list":["https:\/\/affinite.io\/cs\/wp-content\/uploads\/sites\/2\/2013\/08\/wordpress-loop-400x265.png",400,265,true]},"uagb_author_info":{"display_name":"Affinite","author_link":"https:\/\/affinite.io\/cs\/author\/affinite\/"},"uagb_comment_info":0,"uagb_excerpt":"Pokud jste se setkali p\u0159i pro\u010d\u00edt\u00e1n\u00ed Codexu, nebo n\u011bkter\u00e9ho z n\u00e1vod\u016f pro WordPress s pojmem Loop a chcete porozum\u011bt, co tento v\u00fdraz znamen\u00e1, je tento \u010dl\u00e1nek ur\u010den v\u00e1m. Loop je jedn\u00edm ze z\u00e1kladn\u00edch kamen\u016f WordPress \u0161ablony a d\u00e1 se \u0159\u00edci, \u017ee bez n\u011bj by nebyla pr\u00e1ce s t\u00edmto redak\u010dn\u00edm syst\u00e9mem tak jednoduch\u00e1.","_links":{"self":[{"href":"https:\/\/affinite.io\/cs\/wp-json\/wp\/v2\/posts\/970","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/affinite.io\/cs\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/affinite.io\/cs\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/affinite.io\/cs\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/affinite.io\/cs\/wp-json\/wp\/v2\/comments?post=970"}],"version-history":[{"count":0,"href":"https:\/\/affinite.io\/cs\/wp-json\/wp\/v2\/posts\/970\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/affinite.io\/cs\/wp-json\/wp\/v2\/media\/8614"}],"wp:attachment":[{"href":"https:\/\/affinite.io\/cs\/wp-json\/wp\/v2\/media?parent=970"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/affinite.io\/cs\/wp-json\/wp\/v2\/categories?post=970"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/affinite.io\/cs\/wp-json\/wp\/v2\/tags?post=970"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}