Cum să obții data creării unei postări?
Campurile post_date
și post_date_gmt
servesc drept data la care articolul a fost creat. Pentru articolele programate, aceasta va fi data la care articolul este programat să fie publicat.
Nu există o metodă nativă fiabilă pentru a determina data la care un articol programat a fost adăugat. Pentru articolele programate, puteți încerca să utilizați datele post_modified
sau post_modified_gmt
, deoarece acestea vor corespunde momentului în care articolul a fost adăugat inițial. Trebuie să țineți cont că această metodă nu este fiabilă, deoarece data se va schimba atunci când articolul este modificat.
O altă metodă (de asemenea, nefiabilă) este utilizarea reviziilor. Dacă aveți reviziile activate, atunci când un articol este programat sau publicat, o revizie a articolului este salvată. Acea revizie, care va fi salvată după ce articolul este programat când butonul de programare este apăsat, va conține data curentă la care butonul de programare a fost apăsat. Verificați imaginea de mai jos.
Dacă aveți nevoie de o metodă fiabilă pentru a face acest lucru, va trebui să scrieți propria funcție personalizată pentru a salva momentul exact în care butonul de programare a fost apăsat pentru a programa un articol.

Este cu adevărat necesară o astfel de funcție? Cazul tău este foarte izolat

Nu cred că cazul este foarte izolat, mai ales acum că woocommerce este în discuție și doriți să diferențiați între vârsta produselor

Aveam nevoie de aceeași informație și tocmai am aflat singur. Trebuie să faci o interogare personalizată pentru a obține prima dată _wp_old_date
din tabelul postmeta
, așa cum a sugerat @dipak_pusti. Rulează următoarea declarație:
global $wpdb;
$post_id = 1234;
$meta_key = '_wp_old_date';
$post_create_date = $wpdb->get_var( $wpdb->prepare(
"
SELECT MIN($wpdb->postmeta.meta_value) as post_create_date
FROM $wpdb->postmeta
WHERE $wpdb->postmeta.post_id = %d
AND $wpdb->postmeta.meta_key = %s
",
$post_id,
$meta_key
) );
if(is_null($post_create_date)) {
$post_create_date = get_the_date('Y-m-d', $post_id);
}
echo "<p>Data creării postării este: {$post_create_date}</p>";
Notă: Dacă _wp_old_date
este NULL
(acest lucru înseamnă că data publicării nu a fost niciodată schimbată) poți folosi data din get_the_date('Y-m-d', $post_id)
.

Cred că aceasta poate fi simplificată prin apelarea get_post_meta( $post_id, '_wp_old_date' );
, asigurându-mă că nu trece o valoare true
ca al treilea parametru. Rezultatul va fi un tablou de valori de verificat, evitând necesitatea unei interogări SQL. Ca bonus, utilizează WP Cache, deci dacă deja aveți un obiect post, nu se vor face nicio interogare suplimentară

Folosește get_the_date();
pentru a obține data definită în căsuța meta „Publicare” în câmpul „Publicat pe ..”, aceasta fiind de obicei data în care utilizatorul a creat articolul, cu excepția cazului în care acesta a modificat-o.

Când m-am confruntat cu un caz similar cu al tău, am descoperit o cheie meta _wp_old_date
cu o valoare meta care reprezintă o dată.
Am căutat pe Google și am aflat că această funcție este folosită pentru a stoca valoarea veche atunci când un Post sau Obiect este modificat.
https://wpseek.com/function/wp_check_for_changed_dates/
Știu că acesta este un răspuns foarte tardiv, dar poate ajuta pe alții în viitor. :)

Am scris o interogare bazată pe celelalte răspunsuri.
SELECT p.post_title,
(SELECT Min(postmeta.meta_value)
FROM wp_postmeta postmeta
WHERE postmeta.post_id = p.id
AND postmeta.meta_key = '_wp_old_date')
"Prima publicare din postmeta",
DATE(revisions.min_post_modified)
"Prima editare găsită în revizii",
DATE(revisions.min_post_date) min_post_date
FROM wp_posts p,
(SELECT post_parent,
Min(pr.post_modified) min_post_modified,
Min(pr.post_date) min_post_date
FROM wp_posts pr
GROUP BY pr.post_parent) revisions
WHERE p.id = revisions.post_parent
