WordPress időzítés

WordPress időzítés kudarca

Érintettem már egyszer a WordPress időzítő témáját, de csupán általánosan, most a WordPress időzítés talán ritkább okokra visszavezethető kudarcáról szeretnék beszélni.

Probléma ami sajnos megtörténhet, s ellehetetleníti a WordPress időzítést. 👇

📣 Megesik, hogy a WordPress időzónája, a szervered időpontok kezelése, valamint a kliens időzónája (számítógép amelyen a WordPress használatban van) nincsenek szinkronban.

💡 Mire kínálok megoldást PHP script valamint JS lehetőségek kiaknázásával❓

1 ) Arra, hogy a WordPress Vezérlőpult (Dashboard) megjelenítse számodra az időzóna validátor információit.

Ez kijelzi a WordPress időzítés számára fontos WordPress időzónát. Tulajdonképpen azt, ami a „Beállítások / Általános” helyen az „Időzóna” résznél is beállítható.

Megadja számodra a pontos szerver időt, valamint, hogy a szerver UTC-t (Coordinated Universal TimeEgyeztetett Világidő) használ -e? Itt az elején ez fontos, mert a PHP kódom csak azok számára gyógyír, ahol a szerver UTC kezelést alkalmaz az időpontokra. Végül pedig, ami szintén hasznos képbehelyező információ, megmutatja azt is, hogy a kliensgépen milyen időzóna van.

2 ) Az alkalmazott PHP kód amit kínálok Neked, gondoskodik arról, hogy a
WordPress időzónát és a kliensgép időzónáját mindig összehasonlítsa egymással.

Ez azért jó Neked, mert általában a kliensgépek mihelyst felcsatlakoznak az Internet hálózatára, tulajdonképpen szinte bármely operációs rendszert is veszem alapul, de idő és dátum szinkronizálást hajtanak végre.

Tehát a PHP kódom a WordPress időzítés témájában itt azért egy kényelmi megoldás is egyben, mert ennek köszönhetően az Európai Unió jogharmonizációja útján ránk is ragasztott átka, a

✅ 🌞nyári – ❄️ téli időszámítás eltérése többé nem lesz probléma❗

A WordPress ugyanis magától nem állítja be az alkalmazott időzónát. Viszont mivel a kliensgép mindig frissül, így a legjobb ha a kliensgép időzónájával mindig felülírjuk a beállított WordPress időzónát. Mivel ez kliens oldali ügylet, ezért kellett egy JS-t is beiktatni.

3 ) Végezetül, ahhoz hogy a fenti 1 ) és 2 ) pontok mint WordPress időzítés tökéletesen menjenek végbe, azért szükséges az alábbi is ⬇️

Gondoskodni kell arról is, hogy mind posztok mind oldalak esetén, lementésük során az időpontok UTC-re konvertálása megtörténjen. Természetesen frissíteni kell a posztok GMT (Greenwich Mean TimeGreenwichi Középidő) időpontját.

🤔 Hogyan valósítható meg a WordPress időzítés PHP és JS beiktatásával❓

Szimplán a functions.php fájlba beépíthető PHP kódokat valamint JavaScript megoldás kódját mutatom itt, kimásolható formában. A megoldásnak sablontól függetlenül működnie kell.

ℹ️ Értelemszerűen a kódokban a <?php nyitó és záró ?> részeket a saját functions.php fájlodnak megfelelően alkalmazd, attól függően a fájl melyik helyére illeszted, mert lehet nem is lesz rá szükséged, sőt ha belerakod, esetleg hibát kapsz.

PHP kód az időzóna validátor információjának megjelenítéséhez a Vezérlőpulton:

A lenti kód hatására a Vezérlőpult teteje, valahogy így fog kinézni, ahogy illusztrálom 👇

WordPress időzítés validátor a Vezérlőpult avagy Dashboard tetején.


//**Admin értesítés: Időzóna validátor megjelenése a Vezérlőpulton!*/
add_action(‘admin_notices’, ‘tz_validator_admin_notice’);
function tz_validator_admin_notice() {
  //**Csak a vezérlőpulton jelenjen meg*/
  if (function_exists(‘get_current_screen’)) {
    $screen = get_current_screen();
    if ($screen && $screen->base !== ‘dashboard’) {
      return;
    }
  }

  //**WordPress időzóna lekérése*/
  $wp_timezone = get_option(‘timezone_string’);
  if (!$wp_timezone) {
    $offset = get_option(‘gmt_offset’);
    $wp_timezone = ‘UTC’ . ($offset >= 0 ? ‘+’ : ‘’) . $offset;
  }

  //**Szerver idő és időzóna*/
  $server_time = date(‘Y-m-d H:i:s’);
  $server_timezone = date_default_timezone_get() ?: ‘Ismeretlen’;

  //**Megjelenítés*/
  echo ‘<div class=”notice notice-info”><p>’;
  echo ‘<strong style=”color: red;”> Időzóna validátor </strong><br>’;
  echo ‘<strong style=”color: blue;”>WordPress</strong> időzóna: <code>’ . esc_html($wp_timezone) . ‘</code><br>’;
  echo ‘Szerver idő: <code>’ . esc_html($server_time) . ‘</code> <em>(’ . esc_html($server_timezone) . ‘)</em><br>’;
  echo ‘Kliens idő: <span id=”client-timezone”>Betöltés alatt…</span>’;
  echo ‘</p></div>’;
}
//**JavaScript: Kliens időzóna érzékelése*/
add_action(‘admin_footer’, ‘tz_validator_client_script’);
function tz_validator_client_script() {
  //**Csak a vezérlőpulton fusson*/
  if (function_exists(‘get_current_screen’)) {
    $screen = get_current_screen();
    if ($screen && $screen->base !== ‘dashboard’) {
      return;
    }
  }
}

A szükséges JavaScript megoldásom a WordPress időzóna és a kliensgépen lévő időzóna szinkronizálásához, mint kliens oldalon lévő infó

Mivel ez JavaScript kód, ne felejtsd el a <script> nyitó és záró </script> tag-eket alkalmazni!


document.addEventListener(‘DOMContentLoaded’, function() {
  const target = document.getElementById(‘client-timezone’);
  if (!target) return;

  try {
    const offset = new Date().getTimezoneOffset(); // percben
    const utcOffset = -offset / 60; // órában
    const tz = Intl.DateTimeFormat().resolvedOptions().timeZone;

    // AJAX hívás a szerver felé
    fetch(ajaxurl, {
      method: ‘POST’,
      headers: {‘Content-Type’: ‘application/x-www-form-urlencoded’},
      body: ‘action=sync_timezone&client_tz=’ + encodeURIComponent(tz)
    })
    .then(res => res.text())
    .then(data => console.log(‘Időzóna szinkron válasz:’, data));

    const display = tz + ‘ (UTC’ + (utcOffset >= 0 ? ‘+’ : ‘’) + utcOffset + ‘)’;
    target.innerText = display;
  } catch (e) {
    target.innerText = ‘Nem sikerült lekérni a kliens időzónát’;
  }
});

Az alábbi kódrészlet szükséges a ❄️téli – 🌞nyári időszámítás automatikus beállításához: 


//**Fontos: Ez a rész, ami feldolgozza a kliens időzónát és frissíti a WordPress beállítást, ha eltérés lenne a kettő között. Azért hasznos, mert ha elfelejtkezünk a téli, nyári időszámítás beállításáról, ez a folyamat automatizál*/
add_action(‘wp_ajax_sync_timezone’, ‘tz_sync_callback’);
function tz_sync_callback() {
  if (!current_user_can(‘manage_options’)) {
    wp_die(‘Nincs jogosultság’);
  }

  $client_tz = sanitize_text_field($_POST[‘client_tz’] ?? ‘’);
  if (!$client_tz) {
    wp_die(‘Hiányzó időzóna’);
  }

  $wp_tz = get_option(‘timezone_string’);
  if ($wp_tz !== $client_tz) {
    update_option(‘timezone_string’, $client_tz);
    wp_die(‘WordPress időzóna frissítve: ’ . esc_html($client_tz));
  } else {
    wp_die(‘Időzónák egyeznek, nincs változás’);
  }
}

Ez a PHP kód lesz felelős azért, hogy a posztok, oldalak lementésekor az időpontok mindenképpen UTC-re legyenek konvertálva :


//** Az előzőek alapján az információt a Vezérlőpulton megjelenítettük, ami kiírja a WordPress beállított idejét, a használt kliensgép idejét, valamint a szerveren alkalmazott időt. Az alábbi kód viszont megvalósítja azt, hogy a posztok vagy oldalak lementésekor az időpont mindenképpen átkonvertálódjon UTC-re.*/
add_action(‘save_post’, ‘convert_post_time_to_utc’, 10, 3);
function convert_post_time_to_utc($post_ID, $post, $update) {
  // Csak bejegyzésekre alkalmazzuk
  if ($post->post_type !== ‘post’) {
    return;
  }

  // Ellenőrizzük, hogy van-e időpont
  if (empty($post->post_date)) {
    return;
  }

  // WordPress időzóna lekérése
  $wp_timezone = wp_timezone();

  // WP időzónában létrehozott időpont
  $local_time = new DateTime($post->post_date, $wp_timezone);

  // Konvertálás UTC-re
  $utc_time = clone $local_time;
  $utc_time->setTimezone(new DateTimeZone(‘UTC’));
  $post_date_gmt = $utc_time->format(‘Y-m-d H:i:s’);

  // Frissítjük a poszt GMT időpontját
  global $wpdb;
  $wpdb->update(
    $wpdb->posts,
    [‘post_date_gmt’ => $post_date_gmt],
    [‘ID’ => $post_ID]
  );
}

ℹ️ Miért tartottam fontosnak a WordPress időzítés témájában ezt a már kódolást igénylő megoldást mint ötletet tálalni❓

Sokan szoktak megkeresni különböző kérdésekkel.

Néha olyan érzés ez, mintha magam is AI ügynök lennék 😂

Mégis hasznosak számomra ezek a közeledések, mert segítenek látni abban is, hogy az embereknek milyen problémáik vannak, s mire érdemes adekvát válaszokat adni.

Szóval nem egy, nem kettő figura keresett már meg azzal, hogy akár mit csinál, akár mit állít be, a WordPress időzítés mindig kudarcba fullad. S marad az a megoldás, hogy ☀️nyaralásuk🏖️ közben nyomkodják a publikálás gombot.

Több emberrel is beszélgettem, akik megkerestek

A közöttünk kialakult diszkurzusok során felszínre jöttek olyan esetek, hogy sokan a virtuális szerverüket, nem Magyarország területén bérlik, hanem itt is, meg ott is, a nagyvilágban. S látszódott, hogy a probléma sokszor a WordPress időzítés során a WordPress időzóna és kliensgép időzónájának eltérése, valamint, hogy a bejegyzések nem állnak harmóniában a szerver UTC időpontok kezelésével.


Szerintem ez a tartalmam, immáron jól ki tudja egészíteni a 🔗 WordPress időzítő írásom, amelyben a problémaforrások 99%-os okát érintettem, általános jelleggel. Szükséged van 🔗SEO támogatásra❓ Keress bátran, csak tudd, igen egyedi alak vagyok 😉

👋 Találkozzunk valamikor máskor, talán egy totál más írásom útján is❗

📣 Ha megosztanád írásom ⬇️
✍️ Publikációim száma: 458

A világ globális működését feltérképező, s annak összefüggéseit megérteni óhajtó generalista vagyok. Célom nem más, mint az ismeretterjesztés.

Vélemény, hozzászólás?

Az e-mail címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük