ループの外で投稿公開日を取得するにはどうすればよいですか?


8

投稿投稿を自動的に期限切れにするには、投稿公開日を引き出す必要があります。問題は、正しい発行日を取得できないことです。

これが私のコードです:

 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
}

$ postdateをエコーすると、間違った日付が表示されます。wp_postsテーブルに存在する日付ではありません。

日付を正しく取得するにはどうすればよいですか?

回答:


15

get_the_dateループ内で使用する必要があります。ループの外ではを使用します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.
}

'Y-m-d'この例でget_option('date_format')は、wp-adminの日付形式設定に従って日付が表示されるため、で置き換えることを検討してください。


get_the_timeも試しましたが、それでも間違った日付が表示されます。
dev-jim 2012年

1
そして、あなたはそれに投稿IDを渡しますか?get_the_timeここで使用する正しい関数です。
スティーブンハリス

1
また、ここではカスタムSQLクエリを使用しないでください。を使用get_postsし、IDのみを抽出する場合は、wp_list_pluck
Stephen Harris

公開日に基づいてpost_statusを更新するために何かをしていますが、ステータスを更新する他の方法はありますか?これまでのところ、SQLクエリは私にとって最も簡単な方法のようです。
dev-jim

1
@DavidHobs修正済み:)
スティーブンハリス

1

いくつかの現代の魂

ソリューションワン

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

ソリューション2

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

0

これにはget_post()またはget_post_field()を使用できます。どちらもループの外側で機能します。

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

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

このようにしてみてください

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

編集する

get_the_time PHPで使用する現在の投稿の時刻を返します。時間は表示されません。投稿の時間を表示するには、the_time()を使用します。このタグはループ内で使用する必要があります。

get_the_date get_the_dateテンプレートタグは、現在の$ postが書き込まれた日付を取得します。the_date()とは異なり、このタグは常に日付を返します。'get_the_date'フィルターで出力を変更します。

ここで何か不足していますか?


答えをマージしてください。
fuxia

マージする方法を教えてください。
Gembel Intelek

最初の回答を編集し、2番目の回答をそこにコピーします。次に、2番目を削除します。
fuxia

私はあなたのコードを試しました、そして私はget_the_dateではなくget_the_timeから値を得ることができます。
dev-jim
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.