✅ WEB- ja WordPress -uutiset, -teemat, -laajennukset. Täällä jaamme vinkkejä ja parhaita verkkosivustoratkaisuja.

Myöhempien tapahtumien päivittäminen tapahtumakalenterin viesteissä

17

Tämä on todella vivahteikas tapaus, mutta ajattelin, että voisi olla syytä yrittää yleistää postausta varten kaikille, jotka saattavat työskennellä tulevien tapahtumien parissa Modern Triben tapahtumakalenterin avulla.

Oletetaan, että määrität jotain toistuvaa tapahtumaa ja haluat tapahtuman tekstiosassa (tai sopivammin post_content -kohdassa) sanoa jotain seuraavanlaista:

On kulunut N vuotta [tämän tapahtuman] tapahtumisesta.

Asia on, että jokainen myöhempi tapahtuma on ilmeisesti vuoden pitempi kuin sitä edeltävä tapahtuma. Joten et välttämättä voi koodata arvoa tapahtumiin ilman, että se sijoitetaan jokaisen tapahtuman julkaisusisältöön.

Joten mikä on yksi tapa ratkaista tämä?

Myöhempien tapahtumien päivittäminen

Kuten useimmat asiat, tämä riippuu siitä, kuinka koodikantasi on määritetty, mutta olettaen, että työskentelet sarjatapahtumien parissa, se ei ole huono.

Tämän postauksen osalta oletan:

  1. sinulla on tapahtumat asetettu siten, että sinulla on sarjan ensimmäinen tapahtuma ja sitten seuraavat tapahtumat),
  2. voit suorittaa peruskyselyitä käyttämällä $wpdb :tä ,
  3. olet tyytyväinen perussäännöllisiin lausekkeisiin,
  4. wp_update_post on sinulle tuttu

Yleinen prosessi, jolla voit päivittää kunkin tapahtuman vastaamaan oikeaa vuosien määrää sen post_content sisällä, menee suunnilleen näin:

  1. käyttämällä sarjan ensimmäistä tapahtumaa, etsi kaikki myöhemmät viestit,
  2. etsi numero post_contentista ja lisää sitä yhdellä,
  3. päivitä viesti.

Melko suoraviivaista, eikö? Näin se tehdään.

1 Etsi seuraavat tapahtumat

Myöhempien tapahtumien päivittämiseksi on tärkeää, että sinulla on päätapahtuman tunnus. Tämä on yleensä helppo saada, jos olet jo luonut tapahtuman ohjelmallisesti, koska tribe_create_event palauttaa viestitunnuksen.

Muussa tapauksessa voit etsiä viestin otsikon tai vastaavan perusteella. Ja kun sinulla on viesti, voit napata sen tunnuksen.

Kun olet valmis, kirjoita nopea kysely hakeaksesi kaikki viestit, joiden alkuperäinen viestitunnus on ylätasonsa :

<?php

private function find_all_events( $event_id) {

  global $wpdb;
  $events = $wpdb->get_results(
    $wpdb->prepare("
      SELECT ID, post_content
      FROM   $wpdb->posts
      WHERE  post_parent = '%d'
      AND    post_status = 'publish'
    ", $event_id),
    ARRAY_A
  );

  return $events;
}

Ilmeisesti mieluummin asetan tämän sen toimintoon, jotta voin kutsua sitä useisiin paikkoihin koko sovelluksessa, korjata sen tarvittaessa ja eristää sen vastuun.

Voit halutessasi palauttaa tulokset objektikokoelmana tai lisätä kyselyyn tarkenteita rajoittaaksesi palautettavien tulosten tyyppiä. Siitä huolimatta tämän koodin tärkein sisältö on, että nappaat kaikkien myöhempien viestien tunnukset ja post_content sarjassa alkuperäisen tapahtuman tunnuksen perusteella.

2 Päivitä viestin sisältö

Kun tapahtumat on palautettu, voidaan luoda silmukka iteroimaan niitä. Riippuen siitä, miten määrität silmukan, määrittää, kuinka asetat laskurin, mutta yksi yksinkertaisimmista tavoista tehdä tämä on:

  1. määritä arvo, joka alkaa yhdestä ja jonka voit lisätä ja kasvattaa jokaisen iteraation aikana,
  2. lisää tämä viestissä olevaan numeroon.

Joten jos käytät foreach -silmukkaa, koodi saattaa näyttää suunnilleen tältä :

<?php

public function update_future_events( $event_id) {

  $events = $this->find_all_events( $event_id );

  $iteration = 1;
  foreach ($events as $event) {

    preg_match_all( '/(d+)/', $anniversary['post_content'], $matches );

    $original_year = $matches[0];
    $original_year = intval( $original_year[0] );
    $new_year      = ($original_year + $iteration );
    $iteration++;

    // See forth-coming gist.
  }
}

Tämä on hieman monimutkaisempaa, jos viestisi rungossa on useita numeroita, mutta tämä riittää antamaan käsityksen siitä, kuinka voit työskennellä ainakin yhden kanssa (kuten viestin yläosassa olevassa esimerkissä).

3 Päivitä The Post

Lopuksi, kun post_content on päivitetty, on todellakin vain kutsuttava WordPress API päivittämään viestin sisältö.

<?php

public function update_future_events( $event_id) {

  $events = $this->find_all_events( $event_id );

  $iteration = 1;
  foreach ($events as $event) {

    // See previous gist.

    $event['post_content'] = str_ireplace( $original_year, $new_year, $event['post_content'] );
    wp_update_post(array(
      'ID'           => $event['ID'],
      'post_content' => $event['post_content'],
    ));
  }
}

Tietenkin, kuten koko viestissä mainittiin, koodisi voi näyttää erilaiselta, tämän suorituskyvyn näkökohdat voivat olla erilaisia ​​tai vaatia muita näkökohtia (jotka käsittelen hetken).

Mutta jos ei muuta, tämä on ainakin lähtökohta.

Muut näkökohdat

Joskus viestin sisältö voi sisältää useita numeroita, tai joskus voi olla tuhansia myöhempiä tapahtumia. Kaikissa näissä tapauksissa yllä oleva lähestymistapa ei välttämättä sovi laskuun.

Eli voit silti noudattaa näitä vaiheita, mutta ne eivät välttämättä ole tehokkaimpia kirjoitetulla tavalla. Siinä tapauksessa saatat joutua määrittämään eräprosessin käsittelemään sitä tai tekemään sen vapaa-aikaan käyttämällä cron-työtä tai jotakin muuta tapaa ratkaista ongelma.

Edellä mainitut lähestymistavat eivät kuulu tämän viran soveltamisalaan, mutta kolmivaiheinen lähestymistapa pysyy samana. Kyse on enemmän hajota ja hallitse ongelman ratkaisemisesta kuin siitä, miten se tehdään.

Tämä verkkosivusto käyttää evästeitä parantaakseen käyttökokemustasi. Oletamme, että olet kunnossa, mutta voit halutessasi kieltäytyä. Hyväksyä Lisätietoja