Come ottenere la data di creazione di un post?
Il post_date
e post_date_gmt
servono come data in cui il post è stato creato. Per i post programmati, questa sarà la data in cui il post è schedulato per essere pubblicato.
Non esiste un metodo nativo affidabile per determinare la data in cui un post programmato è stato aggiunto. Per i post programmati, puoi provare a utilizzare le date post_modified
o post_modified_gmt
poiché corrisponderanno al momento in cui il post è stato aggiunto per la prima volta. Tuttavia, devi ricordare che questo metodo non è affidabile perché questa data cambierà quando il post viene modificato.
Un altro metodo (anch'esso non affidabile) è utilizzare le revisioni. Se hai le revisioni abilitate, quando un post viene programmato o pubblicato, viene salvata una revisione del post. Questa revisione, che verrà salvata dopo il post programmato quando viene cliccato il pulsante di programmazione, conterrà la data corrente in cui viene cliccato il pulsante di programmazione. Guarda l'immagine qui sotto
Se hai bisogno di un metodo affidabile per ottenere questa informazione, dovrai scrivere una funzione personalizzata per salvare l'ora esatta in cui viene cliccato il pulsante di programmazione per schedulare un post.

È davvero necessaria una funzione del genere? Il tuo caso è molto isolato

Non credo che il caso sia così isolato, specialmente ora che c'è woocommerce e si vuole differenziare in base all'età dei prodotti

Anch'io avevo bisogno delle stesse informazioni e ho risolto da solo. Devi creare una query personalizzata per ottenere la prima data _wp_old_date
dalla tabella postmeta
come suggerito da @dipak_pusti. Esegui la seguente istruzione:
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>La data di creazione del post è: {$post_create_date}</p>";
Nota: Se _wp_old_date
è NULL
(significa che la data di pubblicazione non è mai stata modificata) puoi usare la data da get_the_date('Y-m-d', $post_id)
.

Credo che questo possa essere semplificato chiamando get_post_meta( $post_id, '_wp_old_date' );
, assicurandosi di non passare un valore true
come terzo parametro. Il risultato sarà un array di valori da verificare, evitando la necessità di una query SQL. Come bonus, utilizza la cache di WP quindi se hai già un oggetto post non verranno effettuate query aggiuntive

Utilizza get_the_date();
per ottenere la data definita nel meta box "Pubblica" nel campo "Pubblicato il..", questa è solitamente la data in cui l'utente ha creato l'articolo a meno che non l'abbia modificata.

Quando mi sono trovato bloccato con un caso simile al tuo, ho trovato una meta chiave _wp_old_date
con un meta valore che rappresentava una data.
Cercando su Google, ho scoperto che viene utilizzata una funzione per memorizzare il vecchio valore quando un Post o un Oggetto viene modificato.
https://wpseek.com/function/wp_check_for_changed_dates/
Lo so, questa è una risposta molto tardiva, ma potrebbe aiutare altri in futuro. :)

Ho scritto una query basata sulle altre risposte.
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 pubblicazione da postmeta",
DATE(revisions.min_post_modified)
"Prima modifica trovata nelle revisioni",
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
