Jazyků: English • Deutsch • Italiano • Loop 日本語 Português do Brasil • Русский • 中文(简体) • 中文(繁體) • (Přidat jazyk)
Smyčka je PHP kód používaný WordPress zobrazení příspěvků. Pomocí smyčky WordPress zpracovává každý příspěvek, který se má zobrazit na aktuální stránce, a formátuje jej podle toho, jak odpovídá zadaným kritériím v rámci značek smyčky. Jakýkoli kód HTML nebo PHP ve smyčce bude zpracován na každém příspěvku.
když dokumentace WordPress říká „Tato značka musí být ve smyčce“, například pro konkrétní značky šablon nebo pluginy, bude značka opakována pro každý příspěvek. Například, Smyčka zobrazí následující informace ve výchozím nastavení pro každý post:
- Název (the_title())
- Čas (the_time())
- Kategorie (the_category()).
další informace o každém příspěvku můžete zobrazit pomocí příslušných značek šablon nebo (pro pokročilé uživatele) přístupem k proměnné $post, která je nastavena s informacemi o aktuálním příspěvku během běhu smyčky.
pro začátečníky se podívejte na smyčku v akci.
pomocí smyčky
smyčka by měla být umístěna do indexu motivu.php a v jiných šablonách používaných k zobrazení informací o příspěvku.
nezapomeňte uvést výzvu k šabloně záhlaví v horní části šablon motivu. Pokud používáte Smyčku uvnitř vlastní design (a vaše vlastní design není template), nastavit WP_USE_THEMES na false:
<?php define( 'WP_USE_THEMES', false ); get_header(); ?>
smyčka začíná zde:
<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
a zde končí:
<?php endwhile; else : ?><p><?php esc_html_e( 'Sorry, no posts matched your criteria.' ); ?></p><?php endif; ?>
To je pomocí PHP je alternativní syntaxe řídicích struktur, a může být také vyjádřeno jako:
<?php if ( have_posts() ) {while ( have_posts() ) {the_post(); //// Post Content here//} // end while} // end if?>
Smyčky Příklady
Styl Příspěvky Z Některé Kategorie Odlišně
Tento příklad zobrazuje každý příspěvek s jeho Název (který se používá jako odkaz na Post Permalink), Kategorií a Obsahu. Umožňuje také, aby příspěvky v kategorii s ID Kategorie “ 3 “ byly stylizovány odlišně. K tomu je použita značka šablony in_category (). Pečlivě si přečtěte komentáře, abyste zjistili, co každá část kódu dělá.
poznámka: Veškerý HTML kód musí být mimo <?php ?> tagy. A PHP kód (i věci tak jednoduché jako kudrnaté závorky: } ) musí být uvnitř <?php ?> tagy. Můžete spustit a zastavit bloky PHP kódu prolínat HTML kód v if a else příkazy, jak je uvedeno ve výše uvedeném příkladu.
Vyloučit Příspěvky Z Některé Kategorie
Tento příklad ukazuje, jak skrýt určité Kategorie nebo Kategorie zobrazena. V tomto případě jsou vyloučeny příspěvky z kategorií 3 a 8. Příklad se liší od výše uvedeného příkladu v tom, že provede změnu samotného dotazu.
Poznámka: Pokud použijete tento příklad pro své hlavní stránce, měli byste použít jinou Šablonu pro Kategorii archiv; jinak, WordPress vyloučí všechny příspěvky v Kategorii 3. a Kategorie 8, a to i při prohlížení této Kategorii Archiv! Nicméně, pokud chcete použít stejný soubor šablony, se můžete vyhnout pomocí is_home() značky, aby zajistily, že příspěvky z Kategorie 3. a Kategorie 8 budou vyloučeny z hlavní stránky:
...<?php if ( is_home() ) {$query = new WP_Query( 'cat=-3,-8' );if ( $query->have_posts() ) : while ( $query->have_posts() ) : $query->the_post(); } else {...?>...
Tam jsou jiné Podmíněné Kategorie, které mohou být použity pro ovládání výstupů v závislosti na tom, zda je nebo není konkrétní podmínka je pravda s ohledem na požadovanou stránku.
objektová orientace
smyčky jsou kombinací objektově orientovaného a globálního chování. To je zpočátku matoucí.
dvě důležité globální proměnné pro smyčky jsou:
- $wp_query, který je objektem třídy WP_Query, drží výsledek dotazu databáze WP, mezi nimiž jsou příspěvky $wp_query – >, pole jednotlivých příspěvků WP_Posts.
- $post, což je aktuální objekt třídy WP_Post
Pamatujte si: Všechny šablony kategorie spoléhat na $post globální proměnné ve výchozím nastavení a $post globální proměnná nastavena/upravena the_post(), která dostane jeho data z $wp_query globální proměnné. $post je také nastaven / upraven pomocí WP_Query:: the_post (), jak se používá v sekundárních smyčkách.
více smyček
tato část se zabývá pokročilým využitím smyčky. Je to trochu technické, ale nenechte se tím vyděsit. Začneme snadným příkladem a odtud se propracujeme. S trochou zdravého rozumu, trpělivosti a nadšení můžete také udělat více smyček.
Za prvé, proč by člověk chtěl použít více smyček? Obecně platí, že odpověď zní, že možná budete chtít něco udělat s jednou skupinou příspěvků a udělat něco jiného než s jinou skupinou příspěvků, ale zobrazit obě skupiny na stejné stránce. „Něco“ může znamenat téměř cokoli; jste omezeni pouze vaší dovedností PHP a vaší představivostí.
dostaneme se do níže uvedených příkladů, ale nejprve byste si měli přečíst základy. Podívejte se na základní smyčku. Skládá se z:
<?php if ( have_posts() ) : ?><?php while ( have_posts() ) : the_post(); ?> <!-- do stuff ... --><?php endwhile; ?><?php endif; ?>
trochu stranou na Dělat věci: v tomto příkladu je to prostě zástupný symbol pro spoustu kódu, který určuje, jak k formátování a zobrazení každého příspěvku na stránce. Tento kód se může měnit v závislosti na tom, jak chcete, aby váš WordPress vypadal. Když se podíváte na index Kubrickova tématu.php sekce dělat věci by bylo všechno níže:
<?php while ( have_posts() ) : the_post(); ?>
do výše:
<?php comments_popup_link( 'No Comments "', '1 Comment "', '% Comments "' ); ?>
vysvětlení pro kodéry tam:have_posts() a the_post() jsou pohodlí obaly po globální $wp_query objekt, což je místo, kde všechny akce je. $ Wp_query je volán v záhlaví blogu a fed dotazu argumenty přicházející přes GET a PATH_INFO. $ Wp_query vezme argumenty a vytvoří a provede dotaz DB, který má za následek řadu příspěvků. Toto pole je uloženo v objektu a také vráceno zpět do záhlaví blogu, kde je nacpáno do pole global $posts (pro zpětnou kompatibilitu se starými post loops).
jakmile WordPress dokončí načítání záhlaví blogu a sestupuje do šablony, dorazíme k naší poštovní smyčce. Have_posts () jednoduše volá do $wp_query – >have_posts (), který kontroluje čítač smyčky, aby zjistil, zda v poli post zbývají nějaké příspěvky. A the_post() volání $wp_query->the_post (), která přejde čítač smyčky a nastaví globální proměnnou $post, stejně jako všechny globální data post. Jakmile jsme vyčerpali smyčku, have_posts () vrátí false a jsme hotovi.
příklady smyček
Níže jsou uvedeny tři příklady použití více smyček. Klíčem k použití více smyček je, že $wp_query lze volat pouze jednou. Abychom to mohli obejít, je možné dotaz znovu použít voláním rewind_posts() nebo vytvořením nového objektu dotazu. To je uvedeno v příkladu 1. V příkladu 2 je zahrnuto použití proměnné k uložení výsledků dotazu. A konečně, „více smyček v akci“ spojuje spoustu nápadů, které dokumentují jeden způsob použití více smyček k propagaci příspěvků určité kategorie na domovské stránce vašeho blogu.
více smyček Příklad 1
Chcete-li opakovat stejný dotaz podruhé, zavolejte rewind_posts(). Tím se resetuje počítadlo smyček a umožní vám provést další smyčku.
<?php rewind_posts(); ?> <?php while ( have_posts() ) : the_post(); ?><!-- Do stuff... --><?php endwhile; ?>
Pokud jste skončil s příspěvky na původní dotaz, a chcete použít jiný dotaz, můžete použít $wp_query objekt voláním query_posts() a pak looping zpět přes. Query_posts() provede nový dotaz, vytvoří nové pole příspěvků a resetuje čítač smyček.
pokud potřebujete zachovat původní dotaz, můžete vytvořit nový objekt dotazu.
Více Smyček Příklad 2
Další verze použití více Smyček vyžaduje jinou taktiku pro získání kolem neschopnost používat have_posts() a the_post(). Chcete-li to vyřešit, musíte uložit původní dotaz do proměnné a znovu jej přiřadit k druhé smyčce. Tímto způsobem můžete použít všechny standardní funkce, které se spoléhají na všechny globály.
například:
poznámka: v PHP 5 jsou objekty odkazovány operátorem“ = clone „místo“ = “ jako v PHP 4. Aby příklad 2 fungoval v PHP 5, musíte použít následující kód:
tento druhý příklad však nefunguje v aplikaci WordPress 2.1.
Více Smyček v Akci
nejlepší způsob, jak pochopit, jak používat více smyček je vlastně ukazují příklad jeho použití. Snad nejběžnějším použitím více smyček je zobrazení dvou (nebo více) seznamů příspěvků na jedné stránce. To se často děje, když webmaster chce obsahovat nejen nejnovější napsaný příspěvek, ale také příspěvky z určité kategorie.
ponecháme-li stranou všechny problémy s formátováním a CSS, předpokládejme, že chceme mít dva seznamy příspěvků. Jeden, který by seznam nejnovější příspěvky (standard 10 příspěvky naposledy přidané), a další, který by obsahoval pouze jeden příspěvek z kategorie „Nejlepší“. Příspěvky v kategorii „Nejlepší“ by měly být zobrazeny jako první, následovaný druhým seznamem příspěvků (standard). Háček je v tom, že v obou kategoriích by se neměl objevit žádný příspěvek.
Krok 1. Získejte pouze jeden příspěvek z kategorie „Nejlepší“.
v angličtině by výše uvedený kód četl:
nastavte $my_query rovnající se výsledku dotazování na všechny příspěvky, kde je kategorie pojmenována představoval a mimochodem, získejte mi pouze jeden příspěvek. Také nastavte proměnnou $do_not_duplicate rovnající se identifikačnímu číslu jednoho vráceného příspěvku. Připomeňme, že řádek Do stuff představuje všechny možnosti formátování přidružené k načtenému příspěvku.
Všimněte si, že v dalším kroku budeme potřebovat hodnotu $do_not_duplicate, abychom zajistili, že se stejný příspěvek neobjeví v obou seznamech.
Krok 2. Druhá smyčka, získejte x nejnovější příspěvky (kromě jednoho).
následující kód dostane X posledních příspěvků (jak je definováno v WordPress preference) uložit jeden již zobrazen od první smyčky a zobrazí je podle Dělat věci.
<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); if ( $post->ID == $do_not_duplicate ) continue;?><!-- Do stuff... --><?php endwhile; endif; ?>
V anglický výše uvedený kód by vypadal takto:
Získat všechny příspěvky, kde se příspěvek rovná $do_not_duplicate pak prostě nic (pokračovat), jinak zobrazte všechny ostatní příspěvky podle Dělat věci. Také aktualizujte mezipaměť, aby se pluginy pro označování a klíčová slova hrály hezky. Připomeňme, že proměnná $do_not_duplicate obsahuje ID již zobrazeného příspěvku.
konečný výsledek
zde vypadá konečný kus kódu bez formátování:
konečným výsledkem by byla stránka se dvěma seznamy. První seznam obsahuje pouze jeden příspěvek – Poslední příspěvek z kategorie „funkce“. Druhý seznam bude obsahovat x posledních příspěvků (jak je definováno v předvolbách WordPress) kromě příspěvku, který je již zobrazen v prvním seznamu. Takže, jakmile funkce post je nahrazen novým, předchozí funkce se zobrazí v standardní post seznam sekce níže (v závislosti na tom, kolik příspěvků se rozhodnete zobrazit a na frekvenci příspěvku). Tato technika (nebo podobná) byla používána mnoha ve spojení se znalostí hierarchie šablon k vytvoření jiného vzhledu domova.php a index.Linux. Viz přidružené zdroje v dolní části této stránky.
Poznámka Pro více příspěvků v první kategorii
pokud posts_per_page=2 nebo více, budete muset kód trochu změnit. Proměnná $do_not_duplicate musí být změněna na pole na rozdíl od jedné hodnoty. V opačném případě bude první smyčka dokončena a proměnná $do_not_duplicate se bude rovnat pouze id posledního příspěvku. To bude mít za následek duplicitní příspěvky ve druhé smyčce. Chcete-li problém vyřešit, nahraďte
Všimněte si, že „posts_per_page“ může být libovolné číslo.Tím se změní $do_not_duplicate na pole. Poté nahraďte
<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); if ( $post->ID == $do_not_duplicate ) continue; ?>
<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); if ( in_array( $post->ID, $do_not_duplicate ) ) continue; ?>
, kde budete pokračovat ve vzoru pro jakýkoli posts_per_page je nastaven na (2 v tomto případě).
Případně můžete projít celý $do_not_duplicate pole $wp_query a pouze položky, které odpovídají zadaným kritériím budou vráceny:
<?php query_posts( array( 'post__not_in' => $do_not_duplicate ) );if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
Všimněte si, že místo řetězce dotazu parametr je asociativní pole nastavení post__ne_v úvahu.
vnořené smyčky
vnořené smyčky znamená, že před dokončením první smyčky spustíte druhou smyčku. To může být užitečné například pro zobrazení seznamu příspěvků s krátkým kódem.
$my_query = new WP_Query( 'cat=3' );if ( $my_query->have_posts() ) { while ( $my_query->have_posts() ) { $my_query->the_post();the_content();}}wp_reset_postdata();
je nutné resetovat data hlavní smyčky po vnořené smyčce, aby některé globální proměnné znovu držely správné hodnoty.
zdroje
sekce o více smyčkách je kombinací diskuse Ryana Borena a Alexe Kinga o smyčce na seznamu hackerů. Příklad vnořených smyček byl inspirován další diskusí na mailing listu a příspěvkem Nicolase Kuttlera.
Zdroje
- WordPress WP_Query Generátor
- Dostat Se Do Smyčky – (snímků) úvod do jak pluginy a témata můžete upravit Loop
- WordPress Custom Loop
- WordPress WP_Query Smyčky Generátor
Související
dozvědět Se více o WordPress Smyčky, a různé šablony tagy, které pracují pouze v rámci Smyčky, zde jsou další zdroje:
Více O Cyklu
- Článek: Smyčka v Akci
- Článek: Šablony Tagy
- Čl.: Pomocí Smyčky Soubory Šablony
Články
- Článek: Smyčce – základní přehled o jeho použití dotazu v rámci WordPress smyčky.
- článek: přehled dotazů-vysvětlení, jak určit, které dotazy generují WordPress.
- Článek: Přizpůsobení Dotazy přes Háček
- Článek: Zobrazit Články MYSQL dotaz pomocí vlastní
- Článek: Vybudovat pokročilé dotazy na Taxonomií
- Článek: Vytvořit vlastní dotaz pomocí Odsazení a stránkování
Dokumentaci Kódu
- Třídy: WP_Query – Podrobný Přehled třídy WP_Query
- Třída: WP_Comment_Query – Class za komentář-související dotazy
- Třída: WP_User_Query – Třída pro uživatelské dotazy týkající se
- Objekt: $wpdb – Přehled o využití $wpdb objekt
- Funkce: set_query_var()
- Funkce: get_query_var()
- Funkce query_posts() – Vytvořit další vlastní dotaz
- Funkce: get_post() – Vezměte ID položky a vrátit se záznamy v databázi pro daný článek
- Funkce: get_posts() – specializované funkce, která vrací pole položek
- Funkce: get_pages() – specializované funkce, která vrací pole stránky
- Funkce: have_posts() – podmínku, která určuje, zda dotaz vrátil článek
- Funkce: the_post() – Používá se pro automatické nastavení smyčky po dotazu
- Funkce: rewind_posts() – Vymaže aktuální smyčky
- Funkce: setup_postdata() – Nastaví data pro jeden výsledek dotazu v rámci smyčky
- Funkce: wp_reset_postdata() – Obnoví předchozí dotaz (obvykle po smyčce, do další smyčky)
- Funkce: wp_reset_query()
- Funkce: is_main_query() – Zajistí, že dotaz, který je měněn je pouze hlavní dotaz
- Akční Háček: pre_get_posts – Změna WordPress dotazy před tím, než jsou provedeny
- Akční Háček: the_post – Upravit příspěvek objektu po dotazu
- Filtr Hák: found_posts – Změní hodnotu objektu found_posts WP_Query