WordPress.org

Languages: English • Français • Italiano • Loop 日本語 Português do Brasil • Русский • 中文(简体) • (Lisää kieli)

silmukka on PHP-koodi, jota WordPress käyttää julkaisujen näyttämiseen. Käyttämällä Loop, WordPress käsittelee jokaisen post näytetään nykyinen sivu, ja muotoilee sen mukaan, miten se vastaa määriteltyjen kriteerien sisällä Loop tagit. Kaikki HTML – tai PHP-koodi Silmukka käsitellään jokaisen postitse.

kun WordPress-dokumentaatio sanoo ”Tämän tagin on oltava silmukan sisällä”, kuten tiettyjen Mallitunnisteiden tai liitännäisten kohdalla, tagi toistetaan jokaisen viestin kohdalla. Esimerkiksi silmukka näyttää oletusarvoisesti seuraavat tiedot jokaisesta viestistä:

  • Title (the_title ())
  • Time (the_time ())
  • Categories (the_category ()).

voit näyttää muita tietoja jokaisesta viestistä käyttäen asianmukaisia Mallitunnisteita tai (edistyneille käyttäjille) avaamalla $post-muuttujan, joka on asetettu nykyisen viestin tietoihin silmukan ollessa käynnissä.

aloittelijan katsaus silmukkaan, Katso Silmukka toiminnassa.

käyttäen silmukkaa

silmukka tulee sijoittaa teeman hakemistoon.php ja kaikissa muissa Viestitietojen näyttämiseen käytetyissä malleissa.

muista sisällyttää otsikkopohjaa koskeva kutsu Teemapohjien yläreunaan. Jos käytät silmukan sisällä oman suunnittelun (ja oma muotoilu ei ole malli), aseta wp_use_themes epätosi:

<?php define( 'WP_USE_THEMES', false ); get_header(); ?>

silmukka alkaa tästä:

<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>

ja päättyy tähän.:

<?php endwhile; else : ?><p><?php esc_html_e( 'Sorry, no posts matched your criteria.' ); ?></p><?php endif; ?>

Tämä käyttää PHP: n vaihtoehtoista syntaksia ohjausrakenteille, ja se voidaan ilmaista myös:

<?php if ( have_posts() ) {while ( have_posts() ) {the_post(); //// Post Content here//} // end while} // end if?>

Loop Examples

Style Posts from Some categories Differently

tämä esimerkki näyttää jokaisen postauksen Otsikoineen (jota käytetään linkkinä postauksen permalinkiin), Kategorioineen ja Sisällöineen. Sen avulla myös kategoriatunnuksella ’3’ varustetun kategorian viestit voidaan muotoilla eri tavalla. Tämän saavuttamiseksi käytetään In_category () – Mallitunnistetta. Lue kommentit huolellisesti nähdäksesi, mitä kukin koodin osa tekee.

Huom: kaiken HTML-koodin täytyy olla <ulkopuolella?php ?> tageja. Ja, PHP-koodi (jopa niinkin yksinkertaiset asiat kuin kihara henkselit:}) täytyy olla <sisällä?php ?> tageja. Voit aloittaa ja lopettaa blocks PHP-koodin interperse HTML-koodin sisällä if ja else lausumat, kuten yllä olevassa esimerkissä.

jätä viestit pois jostakin kategoriasta

tämä esimerkki osoittaa, miten tietty Kategoria tai Kategoriat voidaan piilottaa näkyviltä. Tässä tapauksessa luokat 3 ja 8 eivät kuulu virkoihin. Esimerkki eroaa yllä olevasta esimerkistä siinä, että se tekee muutoksen itse kyselyyn.

Huomautus: Jos käytät tätä esimerkkiä pääsivullasi, sinun tulisi käyttää eri mallia Kategoriaarkistollesi; muuten WordPress sulkee pois kaikki kategorian 3 ja 8 julkaisut, vaikka katselisit kyseistä Kategoriaarkistoa! Jos kuitenkin haluat käyttää samaa mallitiedostoa, voit välttää tämän käyttämällä is_home () – tagia varmistaaksesi, että kategorian 3 ja 8 viestit jätetään pois pääsivulta.:

...<?php if ( is_home() ) {$query = new WP_Query( 'cat=-3,-8' );if ( $query->have_posts() ) : while ( $query->have_posts() ) : $query->the_post(); } else {...?>...

on olemassa muita ehdollisia tägejä, joita voidaan käyttää tulosteen ohjaamiseen riippuen siitä, onko tietty ehto totta pyydetyn sivun suhteen.

Olio orientaatio

silmukat ovat olioorientoituneen ja globaalin käyttäytymisen yhdistelmä. Tämä on aluksi hämmentävää.

kaksi tärkeää kokonaismuuttujaa silmukoille ovat:

  • $wp_query joka on luokan wp_query objekti, jolla on WP-tietokannan kyselyn tulos, joista $wp_query – >viestit, joukko yksittäisiä WP_Posts.
  • $post, joka on luokan WP_Post

nykyinen objekti muista: kaikki template-tunnisteet perustuvat oletusarvoisesti $post global-muuttujaan ja $post global-muuttujan asettaa/muokkaa the_post(), joka saa tietonsa $wp_query global-muuttujasta. $post on myös asetettu / muutettu wp_query:: the_post (), jota käytetään toisiosilmukoissa.

Multiple Loops

tässä jaksossa käsitellään silmukan edistynyttä käyttöä. Se on hieman teknistä, mutta älä anna sen pelotella. Aloitetaan helpolla esimerkillä ja jatketaan siitä eteenpäin. Pienellä maalaisjärjellä, kärsivällisyydellä ja innostuksella sinäkin voit tehdä useita lenkkejä.

ensinnäkin, Miksi halutaan käyttää useita silmukoita? Yleensä vastaus on, että saatat haluta tehdä jotain yhden ryhmän virkaa, ja tehdä jotain erilaista toiseen ryhmään virkaa, mutta näyttää molemmat ryhmät samalla sivulla. ”Jotain” voi tarkoittaa melkein mitä tahansa; sinua rajoittavat vain PHP-taitosi ja mielikuvituksesi.

alla kerrotaan esimerkeistä, mutta ensin kannattaa lukea perusasiat. Katso peruslenkki. Se koostuu:

<?php if ( have_posts() ) : ?><?php while ( have_posts() ) : the_post(); ?> <!-- do stuff ... --><?php endwhile; ?><?php endif; ?>

hieman syrjään Do stuff: tässä esimerkissä se on yksinkertaisesti paikkamerkki joukko koodia, joka määrittää, miten muotoilla ja näyttää jokaisen postitse sivulla. Tämä koodi voi muuttua riippuen siitä, miten haluat WordPress näyttää. Jos katsoo Kubrickin teemahakemistoa.php do stuff osio olisi kaiken alla:

<?php while ( have_posts() ) : the_post(); ?>

edellä:

<?php comments_popup_link( 'No Comments "', '1 Comment "', '% Comments "' ); ?>

selitys siellä oleville koodareille: have_postit() ja the_post() ovat convenience-kääreitä globaalin $wp_query-objektin ympärillä, jossa kaikki toiminta on. $Wp_query kutsutaan blogin otsikossa ja syötetään kyselyn argumentit tulevat läpi GET ja PATH_INFO. $Wp_query ottaa argumentit ja rakentaa ja suorittaa dB kysely, joka johtaa joukko viestejä. Tämä array on tallennettu objektin ja myös palasi takaisin blogin otsikko, jossa se on täytetty global $posts array (taaksepäin yhteensopivuus vanhan post silmukoita).

kun WordPress on ladannut blogin otsikon ja on laskeutumassa malliin, saavumme post-silmukkaan. The have_posts() yksinkertaisesti kutsuu $wp_query->have_posts (), joka tarkistaa silmukka laskuri onko virkaa jäljellä post array. And the_post() calls $wp_query->the_post () which advances the loop counter and set up the global $post variable as well all of the global post data. Kun olemme käyttäneet silmukan loppuun, have_posts () palaa false ja olemme valmiita.

Silmukkaesimerkit

alla on kolme esimerkkiä useiden silmukoiden käytöstä. Avain käyttää useita silmukoita on, että $wp_query voidaan kutsua vain kerran. Tämän kiertämiseksi on mahdollista käyttää kyselyä uudelleen kutsumalla rewind_posts() tai luomalla uusi kyselyobjekti. Tätä käsitellään esimerkissä 1. Esimerkissä 2 käsitellään muuttujan käyttöä kyselyn tulosten tallentamiseen. Lopuksi, ”multiple loops in action” tuo joukko ideoita yhdessä dokumentoida yksi tapa käyttää useita silmukoita edistää viestejä tietyn luokan blogisi kotisivulla.

Multiple Loops Esimerkki 1

kelataksesi saman kyselyn läpi toisen kerran, soita rewind_posts (). Tämä Nollaa silmukka laskuri ja voit tehdä toisen silmukan.

<?php rewind_posts(); ?> <?php while ( have_posts() ) : the_post(); ?><!-- Do stuff... --><?php endwhile; ?>

jos olet saanut valmiiksi alkuperäisen kyselyn viestit ja haluat käyttää toista kyselyä, voit käyttää $wp_query-objektia uudelleen kutsumalla query_posts() ja loopaamalla sen jälkeen takaisin läpi. Query_posts () suorittaa uuden kyselyn, rakentaa uuden viestijoukon ja nollaa silmukkalaskurin.

jos haluat säilyttää alkuperäisen kyselyn, voit luoda uuden kyselyobjektin.

Multiple Loops Example 2

another version of using multiple Loops takes another tack for getting around the incability to use have_posts () and the_post (). Voit ratkaista tämän, sinun täytyy tallentaa alkuperäisen kyselyn muuttuja, sitten uudelleen määrittää sen toisen silmukan. Näin voit käyttää kaikkia vakiotoimintoja, jotka perustuvat kaikkiin globaaleihin.

esimerkiksi:

Huom: PHP 5: ssä olioihin viitataan ”= klooni” – operaattorilla eikä ”=” kuten PHP 4: ssä. Jotta Esimerkki 2 toimisi PHP 5: ssä, sinun on käytettävä seuraavaa koodia:

tämä toinen esimerkki ei kuitenkaan toimi WordPress 2.1: ssä.

Multiple Loops in Action

paras tapa ymmärtää kuinka käyttää useita silmukoita on itse asiassa näyttää esimerkki sen käytöstä. Ehkä yleisin käyttö useita silmukoita on näyttää kaksi (tai useampia) luetteloita virkaa yhdellä sivulla. Tämä tehdään usein, kun webmaster haluaa ominaisuus paitsi Uusin viesti kirjoitettu, mutta myös viestejä tietyn luokan.

jättäen kaikki muotoilu-ja CSS-ongelmat sivuun, olettakaamme, että haluamme kaksi julkaisulistaa. Yksi, jossa lueteltaisiin viimeisimmät virat (standard 10 virkaa viimeksi lisätty), ja toinen, joka sisältäisi vain yhden viran kategoriasta ”esillä”. ”Esillä” – kategoriaan kuuluvat virat on esitettävä ensin, ja sen jälkeen on esitettävä toinen virkojen luettelo (standardi). Juju on siinä, että kummassakaan kategoriassa ei pitäisi näkyä postia.

Vaihe 1. Hanki vain yksi viesti ’esillä’ Luokka.

englanniksi yllä oleva koodi kuuluisi:

Aseta $my_query yhtä suureksi kuin tulos, joka saadaan kyselemällä kaikki viestit, joissa luokka on nimetty, ja muuten, Hanki minulle vain yksi viesti. Aseta myös muuttuja $do_not_duplicate yhtä suureksi kuin palautetun viestin ID-numero. Muista, että Do stuff rivi edustaa kaikki muotoiluasetukset liittyvät post haettu.

huomaa, että tarvitsemme arvon $do_not_duplicate seuraavassa vaiheessa varmistaaksemme, että sama viesti ei näy molemmissa luetteloissa.

Vaihe 2. Toinen silmukka, saada X uusimmat viestit (paitsi yksi).

seuraava koodi saa X viimeisimmät viestit (määritelty WordPress-asetuksissa) tallenna jo ensimmäisestä silmukasta näytetty ja näyttää ne Do Stuffin mukaan.

<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); if ( $post->ID == $do_not_duplicate ) continue;?><!-- Do stuff... --><?php endwhile; endif; ?>

englanniksi yllä oleva koodi kuuluisi:

Get all posts, jossa viesti on yhtä kuin $do_not_duplicate then just do nothing (continue), muuten näytetään kaikki muut viestit Do stuff mukaan. Myös, päivittää välimuisti niin tagging ja avainsanan plugins pelata mukavaa. Muistuttaa, $do_not_duplicate muuttuja sisältää ID post jo näkyvissä.

lopputulos

tässä on, miltä koodin viimeinen pala näyttää ilman muotoiluja:

lopputulos olisi sivu, jossa olisi kaksi listaa. Ensimmäisessä luettelossa on vain yksi viesti — viimeisin viesti ’ominaisuus’ Luokka. Toinen luettelo sisältää X viimeaikaiset viestit (määritelty WordPress asetukset) paitsi viesti, joka on jo esitetty ensimmäisessä luettelossa. Niin, kun ominaisuus viesti on korvattu uudella, edellinen ominaisuus näkyy standardin post lista osiossa alla (riippuen siitä, kuinka monta viestiä haluat näyttää ja post taajuus). Monet ovat käyttäneet tätä tekniikkaa (tai vastaavaa) yhdessä Mallihierarkian tuntemuksen kanssa luodakseen erilaisen ilmeen kodille.php ja Hakemisto.php. Katso liittyvät resurssit tämän sivun alareunassa.

huomaa useita ensimmäisen kategorian postauksia

jos posts_per_page=2 tai enemmän, sinun on muutettava koodia hieman. Muuttuja $do_not_duplicate on muutettava riviksi vastakohtana yhdelle arvolle. Muussa tapauksessa ensimmäinen silmukka päättyy ja muuttuja $do_not_duplicate vastaa vain viimeisimmän viestin id: tä. Tämä johtaa päällekkäisiä viestejä toisen silmukan. Ongelman korjaamiseksi korvaa

kanssa

huomaa, että” posts_per_page ” voi olla mikä tahansa numero.Tämä muuttaa $do_not_duplicate osaksi array. Korvaa sitten

<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); if ( $post->ID == $do_not_duplicate ) continue; ?>

arvolla

<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); if ( in_array( $post->ID, $do_not_duplicate ) ) continue; ?>

, jos jatkat kaavaa mille tahansa posts_per_page-arvolle, joka on (2 tässä tapauksessa).

Vaihtoehtoisesti voit siirtää koko $do_not_duplicate array $wp_query ja vain merkinnät, jotka vastaavat kriteerejäsi palautetaan:

<?php query_posts( array( 'post__not_in' => $do_not_duplicate ) );if ( have_posts() ) : while ( have_posts() ) : the_post(); ?> 

huomaa, että merkkijonon sijaan kyselyparametri oli assosiatiivinen array, joka asetti valinnan__not_.

sisäkkäiset silmukat

sisäkkäiset silmukat tarkoittavat, että juostaan toinen lenkki ennen ensimmäisen viimeistelyä. Tämä voi olla hyödyllistä näyttää post luettelo lyhytnumeroon esimerkiksi.

$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();

on tarpeen nollata pääsilmukan tiedot sisäkkäisen silmukan jälkeen, jotta joillakin globaaleilla muuttujilla on jälleen oikeat arvot.

lähteet

useita silmukoita käsittelevä osio on yhdistelmä Ryan Borenin ja Alex Kingin keskustelua hakkereiden postituslistalla olevasta silmukasta. Sisäkkäisten looppien esimerkki sai innoituksensa postituslistan toisesta keskustelusta ja Nicolas Kuttlerin postauksesta.

resurssit

  • WordPress Wp_query Generator
  • Getting Into The Loop – (dioja) an introduction to how plugins and themes can modify the Loop
  • WordPress Custom Loop
  • WordPress Wp_query Loop Generator

Related

jos haluat lisätietoja WordPress-silmukasta ja erilaisista Template-tägeistä, jotka toimivat vain silmukan sisällä, tässä on lisää resursseja:

lisää silmukasta

  • artikkeli: Silmukka toiminnassa
  • artikkeli: Template tagit
  • artikkeli: Silmukan käyttäminen Mallitiedostoissa

Articles

  • Article: The Loop – peruskatsaus kyselyn käyttöön WordPress-silmukassa.
  • artikkeli: kyselyn yleiskatsaus-selvitys siitä, miten määrittää, mitkä kyselyt luovat WordPress-sivuston.
  • artikkeli: Räätälöintikyselyt koukun kautta
  • artikkeli: Näytä artikkelit MySQL-kysely muokatulla
  • artikkeli: Rakenna kehittyneet kyselyt Taksonomioista
  • artikkeli: Rakenna mukautettu kysely offsetillä ja sivunumerolla

Koodidokumentaatio

  • Luokka: WP_Query – Detailed Overview of class WP_Query
  • Class: WP_Comment_Query – Class for comment-related queries
  • Class: WP_User_Query – Class for user-related queries
  • Object: $wpdb – Overview on the use of the $wpdb object
  • Function: set_query_var()
  • Function: Get_query_var()
  • Function: Query_posts() – create additional custom query
  • Function: Get_post() – take an ID of an item and return the records in the database for that article
  • function: get_posts() – erikoisfunktio, joka palauttaa joukon kohteita
  • Function: get_posts() – erikoisfunktio, joka palauttaa joukon sivuja
  • Function: have_posts() – ehto, joka määrittää, palauttiko kysely artikkelin
  • Function: the_post() – käytetään asettamaan silmukka automaattisesti kyselyn jälkeen
  • Function: rewind_posts() – tyhjentää nykyisen silmukan
  • funktio: setup_postdata() – asettaa tiedot yhdelle kyselyn tulokselle silmukan sisällä
  • funktion: wp_reset_postdata() – palauttaa edellisen kyselyn (yleensä silmukan jälkeen toisen silmukan sisällä)
  • funktio: wp_reset_query()
  • funktio: is_main_query() – varmistaa, että muuttuva kysely on vain pääkysely
  • Toimintokoukku: pre_get_posts – muuta WordPress – kyselyjä ennen kuin ne suoritetaan
  • toimintokoukku: the_post – muokkaa Post-objektia kyselyn jälkeen

  • filter Hook: found_posts-muuttaa kohteen found_posts wp_query
tämä artikkeli on merkitty muokattavaksi. Codexia voi auttaa muokkaamalla sitä.

You might also like

Vastaa

Sähköpostiosoitettasi ei julkaista.