フォーラム

[解決済み] 他のWP BlogのRSSの取得時の日時について (8 件の投稿)

  1. kentanjp
    メンバー
    2 years前の投稿 #

    こちらの記事を参考にWordPress(サイト1)で作ったテンプレにWordPress(サイト2)のRSS情報を表示させてます。

    WordPress 2.8xでは問題なかったのですが、WordPress 2.9xより
    投稿日時が公開日時でなく記事の公開ボタンを押した日時になり困っています。
    #予約投稿で1/6 15時公開で投稿を1/4 12時に押すとRSSの取得日時が1/4 12時で表示されます。

    WordPress 2.8xのときのように公開日時で取得するにはコアファイルのどこを修正すればいいのでしょうか?

  2. kz
    メンバー
    2 years前の投稿 #

    記事の公開ボタンを押した日時

    ウチでは GMT になってました。
    fetch_rss() は fetch_feed に取って替わられたので、
    以下のようにするとOKです。

    <?php
    include_once(ABSPATH . WPINC . '/rss.php');
    date_default_timezone_set('Asia/Tokyo');
    //フィードのURI
    $rss_arr = array(
        'http://example.com/feed/'
    	);
    
    //表示件数
    $num = 10;
    
    foreach($rss_arr as $uri)
    {
        $rss = fetch_feed($uri);
    
        $title = $rss->get_title();
        $link  = $rss->get_permalink();
    	$maxitems = $rss->get_item_quantity(10); //10件まで
    	$rss_items = $rss->get_items(0, $maxitems); 
    
        foreach($rss_items as $item)
        {
            $item_title = $item->get_title();
            $item_link  = $item->get_permalink();
            $out_item_date  = $item->get_date('Y年n月j日');
    
            $out_item = '<dt>
                             <a href="' . $item_link . '">' . $item_title . '</a>
                         </dt>
                         <dd style="font-size:77%;">
                             <a href="' . $link . '">' . $title . '</a>
                         </dd>
                         <dd style="font-size:77%;">' . $out_item_date . '</dd>';
    
            $unix_time = $item->get_date('U');
            $item_arr[$unix_time] = $out_item;
        }
    }
    
    //ソート
    krsort($item_arr);
    
    //出力
    echo '<h2>新着' . $num . '件</h2>';
    
    echo '<dl>';
    
    for(reset($item_arr); $key = key($item_arr); next($item_arr))
    {
        echo $item_arr[$key];
    
        ++$count;
    
        if($count === $num)
        {
            break;
        }
    }
    
    echo '</dl>';
    ?>
  3. kentanjp
    メンバー
    2 years前の投稿 #

    レスどうもです。
    試してみましたが変わりませんでした(^-^;

  4. kz
    メンバー
    2 years前の投稿 #

    こちらでは正常なので WordPress 2.9x のせいではない気がします。

    以下のどれもが「公開ボタンを押した日時」でしょうか?
    ・http://example.com/feed/ を直接見て、各記事の日付を確認。
    ・記事の post_date値。データベースを直接見るか the_time('Y年n月j日')で確認。

    だとすると「予約投稿で1/6 15時公開」が機能していない様子。
    まずは、プラグイン無し&デフォルトテーマで試してみてください。

  5. kentanjp
    メンバー
    2 years前の投稿 #

    http://example.com/feed/のsauceを見るとpubDateの値が投稿を押した日時になってます。
    http://example.com/feed/をブラウザで読み込むと正常に公開日時(予約投稿で指定した日時)で表示されます。

    DBみましたがpost_date_gmtの日時が別BlogでRSS表示させたときに取得されてます。


    1/6 0時に公開予定で1/5 15時に投稿ボタンを押した場合
    DBの値:
    post_date:2010-01-06 00:00:29
    post_date_gmt:2010-01-05 15:00:29

    投稿したBlogの個別記事・/feed/ではpost_dateで表示されています。
    ※ただし/feed/のsauceを見るとpost_date_gmtで表示
    別Blogで初回質問時のサイトのPHPを使って表示させると投稿日時がpost_date_gmtで表示されている

    別Blogで表示させるのにpost_date_gmtの値ではなくpost_dateの値を表示させたい

    うちだけの問題っすかねぇ?

  6. kentanjp
    メンバー
    2 years前の投稿 #

    うーん。同じ鯖に別DB作って確認しましたら正常に動作しますねぇ・・・。
    予約投稿で投稿し公開ボタンを押した時間を記録し、予約時間が過ぎて記事が公開されることを確認しDBの値を見てあっているかを確認後、/feedを表示させてsauceを確認。

    サイト2(記事があるBlog)のほうは・・・
    wp-includes/feed-rss2.phpの
    <pubDate><?php echo mysql2date('D, d M Y H:i:s +0000', get_post_time('Y-m-d H:i:s', true), false); ?></pubDate>
    の出力値(http://example.com/feed/)が何故かpost_dateではなくpost_date_gmtの値がでてるみたいです。(なので意図的に公開時間を変更しても修正されない)
    でサイト1でRSS情報を表示すると投稿ボタンを押した日時が出ると・・・。

    うーん。2.9にUPするときにDBのアップデートしくったのかな・・・。

  7. kz
    メンバー
    2 years前の投稿 #

    1/6 0時に公開予定で1/5 15時に投稿ボタンを押した場合

    だと9時間なので、
    クリックした時間なのか、公開予定の9時間前(GMT)なのか
    区別がつかないですね。

    post_date_gmt が公開予定の9時間前なら正常動作です。
    クリックした時間でなくて単に GMT だった場合は、
    WordPressでRSSの時間ずれを修正
    辺りを確認してみてください。

  8. kentanjp
    メンバー
    2 years前の投稿 #

    kzさん

    ありがとうございます。
    クリックした時間が常に表示されてる状態になってます。

    教えていただいたサイトを参考に修正しましたが結局はかわりませんでした。
    イレギュラーな問題だと思うので・・・RSS表示PHPをRSSからATOMに変更して対応しました。
    #ATOMは記事の再編集すると公開時間ではなく投稿時間でアップデートタイムがでるので微妙ですが

    一旦クローズにしてもう少し探してみます・・・。

返信

ログイン しなければ投稿できません。

About this Topic

Tags

タグ はまだありません。