✅ WEB ja WordPressi uudised, teemad, pistikprogrammid. Siin jagame näpunäiteid ja parimaid veebisaidi lahendusi.

Järgmiste sündmuste värskendamine sündmuste kalendri postitustes

11

See on tõesti nüansirikas juhtum, kuid ma arvasin, et võib-olla tasub proovida postitust üldistada kõigile, kes võivad töötada tulevaste sündmustega Modern Tribe’i sündmuste kalendriga.

Oletame, et seadistate mõnda korduvat sündmust ja soovite sündmuse põhitekstis (või õigemini post_content) öelda midagi sellist:

[selle sündmuse] toimumisest on möödunud N aastat.

Asi on selles, et iga järgnev sündmus on ilmselgelt aasta võrra suurem kui sellele eelnenud. Seega ei saa te väärtust sündmustesse tingimata sisse kodeerida, ilma et see oleks paigutatud iga sündmuse postituse sisusse.

Mis on üks viis selle lahendamiseks?

Järgmiste sündmuste värskendamine

Nagu enamiku asjade puhul, sõltub see sellest, kuidas teie koodibaas on seadistatud, kuid eeldades, et töötate sarja sündmustega, pole see väga halb.

Selle postituse puhul eeldan, et:

  1. teil on sündmused seadistatud nii, et teil on sarja esimene sündmus ja seejärel järgmised sündmused),
  2. teil on mugav käivitada põhipäringuid kasutades $wpdb ,
  3. teile meeldivad põhilised regulaaravaldised,
  4. teile on tuttav wp_update_post

Üldine protsess, mille abil saate iga sündmust värskendada, et kajastada selle post_content õiget aastate arvu, on umbes selline:

  1. kasutades sarja esimest sündmust, otsige üles kõik järgnevad postitused,
  2. leidke number jaotises post_content ja suurendage seda ühe võrra,
  3. värskenda postitust.

Päris otsekohene, eks? Siin on, kuidas seda teha.

1 Otsige üles järgnevad sündmused

Järgmiste sündmuste värskendamiseks on oluline omada põhisündmuse ID-d. Seda on tavaliselt lihtne hankida, kui olete sündmuse juba programmiliselt loonud, kuna tribe_create_event tagastab postituse ID.

Vastasel juhul saate teha näiteks postituse otsimise selle pealkirja või muu sarnase järgi. Ja kui teil on see postitus, saate selle ID haarata.

Kui olete lõpetanud, kirjutage kiire päring, et hankida kõik postitused, mille esialgne postituse ID on selle vanem :

<?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;
}

Ilmselgelt eelistan ma seda oma funktsiooni lisada, et saaksin seda kogu rakenduses mitmesse kohta kutsuda, vajadusel siluda ja eraldada selle vastutus.

Võib-olla soovite tulemused tagastada objektide kogumina või lisada päringule rohkem tähiseid, et piirata tagastatavate tulemuste tüüpi. Sellest olenemata on selle koodi peamine järeldus see, et haarate kõigi järgnevate postituste ID -d ja  post_content, mis põhinevad esialgse sündmuse ID-l.

2 Värskendage postituse sisu

Kui sündmused on tagastatud, saab nende kaudu itereerimiseks seadistada tsükli. Sõltuvalt sellest, kuidas te tsükli määratlete, määrab loenduri seadistamise, kuid üks lihtsamaid viise selleks on:

  1. määrake väärtus, alustades ühest, mida saate iga iteratsiooni ajal lisada ja suurendada,
  2. lisa see postitusest leitud numbrile.

Nii et kui kasutaksite foreach – tsüklit, võib kood välja näha umbes selline :

<?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.
  }
}

See on pisut keerulisem, kui teie postituse põhitekstis on mitu numbrit, kuid sellest piisab, et anda aimu, kuidas töötada vähemalt ühe numbriga (nagu postituse ülaosas olevas näites).

3 Värskendage postitust

Lõpuks, kui post_content on värskendatud, tuleb postituse sisu värskendamiseks lihtsalt helistada WordPressi API-le.

<?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'],
    ));
  }
}

Muidugi, nagu kogu postituses mainitud, võib teie kood välja näha teistsugune, selle toimivusaspektid võivad olla erinevad või nõuda muid kaalutlusi (mida käsitlen kohe).

Aga kui mitte midagi muud, siis see on vähemalt lähtepunkt.

Muud kaalutlused

Võib juhtuda, et postituse sisu sisaldab mitut numbrit, või võib juhtuda, et järgnevaid sündmusi võib olla tuhandeid. Kõigil neil juhtudel ei pruugi ülaltoodud lähenemine sobida.

See tähendab, et saate neid samme siiski järgida, kuid need ei pruugi olla kõige tõhusamad, nagu kirjutatud. Sel juhul peate võib-olla seadistama pakkprotsessi, et seda käsitleda või teha seda vabadel tundidel, kasutades cron-tööd või ühte mitmest muust probleemi lahendamise viisist.

Eespool nimetatud lähenemisviisid ei kuulu selle postituse ulatusse, kuid kolmeastmeline lähenemisviis jääb samaks. Probleemiga tegelemine on pigem jaga ja valluta, kui selle lahendamine.

See veebisait kasutab teie kasutuskogemuse parandamiseks küpsiseid. Eeldame, et olete sellega rahul, kuid saate soovi korral loobuda. Nõustu Loe rohkem