Come ottenere la data di pubblicazione del post al di fuori del ciclo?


8

Devo estrarre la data di pubblicazione del post per far scadere automaticamente il post. Il fatto è 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 ); //here is what I can figure out
       .......
      ......etc
}

Quando faccio eco a $ postdate, esce con una data sbagliata. Non la data esistente nella tabella wp_posts.

Come posso ottenere correttamente la data?

Risposte:


15

get_the_datedeve essere usato all'interno del Loop. Per l'uso al di fuori del ciclo get_the_time.

$posts = get_posts(array('numberposts'=>-1)); //Get all published posts
foreach ($posts as $post){
    echo get_the_time('Y-m-d', $post->ID); //Echos date in Y-m-d format.
}

Considerare la sostituzione 'Y-m-d'in questo esempio con in get_option('date_format')quanto visualizzerà la data secondo l'impostazione del formato della data in wp-admin.


Ho provato anche get_the_time, ma mi dà ancora una data sbagliata.
dev-jim

1
E gli dai il pass ID post? get_the_timeè la funzione corretta da usare qui.
Stephen Harris,

1
Inoltre, non dovresti utilizzare una query SQL personalizzata qui. Usa get_postse poi se vuoi estrarre solo gli ID, usawp_list_pluck
Stephen Harris il

Sto facendo qualcosa per aggiornare post_status in base alla data di pubblicazione, c'è un altro modo per aggiornare lo stato? Finora, la query SQL mi sembra il modo più semplice.
dev-jim

1
@DavidHobs Risolto :)
Stephen Harris,

1

Alcune anime moderne

Soluzione 1

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

Soluzione 2

<?php the_time(get_option('date_format')) ?>

0

Per questo puoi usare get_post () o get_post_field () , entrambi funzionano al di fuori del ciclo.

$post_object = get_post($id);
$post_date = date( 'F jS, Y', strtotime( $post_object->post_date ) );

Un elenco completo di 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] =>
)

-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 />';
}

modificare

get_the_time Restituisce l'ora del post corrente da utilizzare in PHP. Non visualizza l'ora. Per visualizzare l'ora di un post, usa the_time (). Questo tag deve essere utilizzato in The Loop.

get_the_date Il tag template get_the_date recupera la data in cui è stato scritto l'attuale $ 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?


Unisci le tue risposte.
fuxia

mostrami come unirmi, per favore?
Gembel Intelek,

Modifica la prima risposta e copia il codice dalla seconda in essa. Quindi eliminare il secondo.
fuxia

Ho provato i tuoi codici e posso ottenere il valore da get_the_time, non get_the_date.
dev-jim,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.