Come ottenere la data di pubblicazione del post fuori dal loop?
Ho bisogno di estrarre la data di pubblicazione del post per far scadere automaticamente il post. Il problema è che non riesco a ottenere la data di pubblicazione corretta.
Ecco il mio codice:
global $wpdb;
$post_ids = $wpdb->get_results( "SELECT ID FROM $wpdb->posts WHERE post_status ='publish'" );
foreach($post_ids as $id){
$postdate = get_the_date("Y-m-d",$id ); //qui è quello che sono riuscito a capire
.......
......etc
}
Quando faccio l'echo di $postdate, viene mostrata una data sbagliata. Non è la data presente nella tabella wp_posts.
Come posso ottenere la data correttamente?
get_the_date
deve essere utilizzato all'interno del Loop. Per utilizzarlo al di fuori del loop, usa get_the_time
.
$posts = get_posts(array('numberposts'=>-1)); //Ottieni tutti i post pubblicati
foreach ($posts as $post){
echo get_the_time('Y-m-d', $post->ID); //Mostra la data nel formato Y-m-d.
}
Considera di sostituire 'Y-m-d'
in questo esempio con get_option('date_format')
poiché questo mostrerà la data secondo il formato impostato in wp-admin.

E hai passato l'ID del post alla funzione? get_the_time
è la funzione corretta da usare in questo caso.

Inoltre - non dovresti usare una query SQL personalizzata qui. Usa get_posts
e poi, se vuoi estrarre solo gli ID, utilizza wp_list_pluck

Sto cercando di aggiornare lo stato del post (post_status) in base alla data di pubblicazione. C'è qualche altro modo per aggiornare lo stato? Finora, la query SQL mi sembra il modo più semplice.

Vedi le modifiche - quasi mai dovresti aver bisogno di interrogare direttamente il database.

Capisco il tuo punto. Ho provato e funziona perfettamente. Ma mi piacerebbe sapere perché non dovrei interrogare direttamente il database? Per motivi di sicurezza?

Sicurezza (in un certo senso), prestazioni (probabilmente) ma soprattutto semplicità del codice e compatibilità futura - cioè utilizzare l'API fornita (get_post
) in questo caso.

Grazie Stephen, non sapevo che si potesse passare un ID. Quando si usa get_posts non c'è modo di visualizzare la data del post senza di esso.

@StephenHarris mentre questa funzione ottiene la data in cui il post è stato creato, è possibile ottenere la data/ora di modifica al di fuori del loop?

@Anagio - vedi http://wordpress.stackexchange.com/questions/95769/get-date-of-last-update-outside-of-loop/115044#115044

Secondo il Codex, il tag get_the_time
deve essere usato all'interno del Loop. http://codex.wordpress.org/Function_Reference/get_the_time

@MaorBarazany, sembra che il codex abbia sbagliato, vedi sorgente: https://core.trac.wordpress.org/browser/tags/3.8/src/wp-includes/general-template.php#L1497

Hai collegato a get_post_time invece che a get_the_time, il che è piuttosto confuso. Entrambi fanno la stessa cosa ma hanno argomenti diversi. C'è la possibilità di correggere il link? Grazie!

Puoi utilizzare get_post() o get_post_field() per questo scopo, entrambi funzionano al di fuori del loop.
$post_object = get_post($id);
$post_date = date( 'F jS, Y', strtotime( $post_object->post_date ) );
Un elenco completo dei valori restituiti da get_post:
WP_Post Object
(
[ID] =>
[post_author] =>
[post_date] =>
[post_date_gmt] =>
[post_content] =>
[post_title] =>
[post_excerpt] =>
[post_status] =>
[comment_status] =>
[ping_status] =>
[post_password] =>
[post_name] =>
[to_ping] =>
[pinged] =>
[post_modified] =>
[post_modified_gmt] =>
[post_content_filtered] =>
[post_parent] =>
[guid] =>
[menu_order] =>
[post_type] =>
[post_mime_type] =>
[comment_count] =>
[filter] =>
)

prova così
$getPosts = $wpdb->get_results(
"
SELECT ID, post_date,post_title
FROM $wpdb->posts
WHERE post_status = 'publish'
AND post_type = 'post'
ORDER BY ID ASC
"
);
foreach ( $getPosts as $myPost ) {
$id = $myPost->post_date;
echo $myPost->ID.' | '. $myPost->post_title.' | '. get_the_date("Y-m-d",$id ).'<br />';
}
modifica
get_the_time Restituisce l'ora del post corrente per l'uso in PHP. Non visualizza l'ora. Per visualizzare l'ora di un post, usa the_time(). Questo tag deve essere usato all'interno del Loop.
get_the_date Il template tag get_the_date recupera la data in cui è stato scritto il post corrente ($post). A differenza di the_date(), questo tag restituirà sempre la data. Modifica l'output con il filtro 'get_the_date'.
Mi sto perdendo qualcosa qui?

Modifica la prima risposta e copia il codice dalla seconda in essa. Poi elimina la seconda.
