Come ottenere la data di pubblicazione del post fuori dal loop?

19 giu 2012, 14:43:39
Visualizzazioni: 60.1K
Voti: 11

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?

0
Tutte le risposte alla domanda 4
14
21

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.

19 giu 2012 15:13:02
Commenti

Ho provato anche get_the_time, ma mi dà ancora la data sbagliata.

dev-jim dev-jim
19 giu 2012 15:15:19

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

Stephen Harris Stephen Harris
19 giu 2012 15:20:01

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

Stephen Harris Stephen Harris
19 giu 2012 15:22:00

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.

dev-jim dev-jim
19 giu 2012 17:04:54

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

Stephen Harris Stephen Harris
19 giu 2012 17:27:59

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

dev-jim dev-jim
19 giu 2012 17:50:11

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.

Stephen Harris Stephen Harris
19 giu 2012 18:01:45

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.

Diana Diana
29 giu 2013 07:47:50

@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 Anagio
21 set 2013 02:09:29

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

Maor Barazany Maor Barazany
15 gen 2014 00:29:28

@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

Stephen Harris Stephen Harris
15 gen 2014 01:23:58

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!

David Hobs David Hobs
13 giu 2014 02:30:24

@DavidHobs Sistemato :)

Stephen Harris Stephen Harris
13 giu 2014 17:31:10
Mostra i restanti 9 commenti
0

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] =>
)
12 ott 2018 03:03:26
0

Alcune soluzioni moderne

Soluzione Uno

<?php echo get_the_date('j F Y', get_the_ID()) ?>

Soluzione Due

<?php the_time(get_option('date_format')) ?>
26 mar 2018 22:25:38
4
-2

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?

19 giu 2012 15:12:02
Commenti

Per favore unisci le tue risposte.

fuxia fuxia
19 giu 2012 16:17:24

mostrami come unire, per favore?

Dazilio Dazilio
19 giu 2012 16:29:47

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

fuxia fuxia
19 giu 2012 16:32:18

Ho provato i tuoi codici e riesco a ottenere il valore da get_the_time, non da get_the_date.

dev-jim dev-jim
19 giu 2012 17:06:26