サポート » プラグイン » KtaiEntry+Subscribe2での投稿日時について

  • 解決済 k.ueda

    (@kueda-1)


    KtaiEntry, KtaiStyleを利用させていただいております。
    大変、有益なプラグインの提供に感謝します。

    現在、WP(MU)+KtaiEntry+Subscribe2の組み合わせで、
    メールでの投稿を受け付けて、ダイジェスト配信する仕組みを
    構築しています。通常、Webサイトを公開して、それなりにアクセス
    があれば、wp-cronがそれなりに動作して、メール投稿の取り込み
    や、定期的な配信が実行されると思いますが、Webのアクセスが
    あまりない場合に、期待どおりに機能しないことがあります。
    そして、いろいろ試していくうちに、一つの問題点に行き着きました。

    例えば、次のように設定します。
    ・毎時00分にOSのcronでトップページをwget
     #wp-cron.phpが動作することを期待する。
    ・毎時10,20,30,40,50分にOSのcronでretrieve.phpをwget
     #00分にメール取り込みとメール配信が重ならないように。
     #wp-cronのタイミングでretrieveも動作するとは思うのですが…

    この状態で、55分にメール投稿があったとします。
    しかし、retrieveは次回の10分まで実行されません。
    そして、subscribeの配信が00分に実行されると、
    その時点では、メール投稿がWPに取り込まれていないので、配信の
    対象から外れます。しかも、55分のメール投稿が10分に記事として
    取り込まれても、投稿日時が55分になっているので、subscribeは
    配信済みと思って、次回の00分の配信対象にもなりません。

    この状況を考えると、retrieveではなくて、メール受信と同時に
    記事として取り込むinjectを使うべき、とも思うのですが、設定の
    方法がメールサーバに依存しますし、あまり無いとは思いますが、
    連続で投稿がある場合などは、retrieveのほうがスムーズに
    取り込み処理をしてくれるのでは、とも思います。

    で、長々と書いてしまいましたが、ご検討いただきたいのは、
    投稿日時(post_date, post_date_gmt)をメール送信のタイムスタンプ
    ではなくて、retrieveを実行する際の、post.phpにおけるinsert
    のタイムスタンプに設定する機能です。

    試しに手元の環境で、post.php(328行目あたり)を次のように修正してテストしました。
    //$post_date_gmt = gmdate(‘Y-m-d H:i:s’, $post_time_gmt);
    //$post_date = gmdate(‘Y-m-d H:i:s’, $post_time);
    $post_date_gmt = gmdate(‘Y-m-d H:i:s’);
    $post_date = date(‘Y-m-d H:i:s’);
    とりあえず、期待する動作になっています。

    ただし、WPのルールとか仕様等によって、上記の対処がイレギュラーなもの
    である場合は、無視をしていただいて結構です。
    ご検討、よろしくお願いします。

3件の返信を表示中 - 1 - 3件目 (全3件中)
  • 作者が返答するまえに横から失礼しますが、上記設定ですと次回取り込みまでに2通以上の投稿があった場合、その投稿すべてが同じ投稿時間になってしまいませんか?
    それよりも配信時間や取り込み時間の方を調整した方が良い気がします。Subscribe2を使用していないのでどこまでそれができるのかはわかりませんが・・・良いプラグインですね、使ってみようかな;)

    モデレーター IKEDA Yuriko

    (@lilyfan)

    まず、WordPress MU では inject.php 方式はメインブログ以外機能しません (現時点での制限事項)。したがって、複数ブログを運営しているならば retrive 方式を使わざるを得ません。あと、Ktai Entry は wp cron の仕組みを使わず、自前で制御しています。

    そもそもの問題は、retrive.php と wp cron の実行タイミングがずれていることが理由です。少なくとも、retrieve.php を 9,19,29,39,49,59 分に実行した方がいいです。ただし、これでも、59分〜00分に投稿されたものは Subscribe2 から漏れてしまいます。

    あとは、Subscribe2 側を調整して「59分から59分までに投稿されたもの」を配信させるような改造が必要じゃないでしょうか。

    改造が嫌な場合は、Ktai Entry の post_date/ktai_entry.php フィルターを使って、59分〜00分に投稿された場合のみ、1分後ろにずらすなどの対策を打てばいいかもしれません。

    $post_date_gmt = gmdate(‘Y-m-d H:i:s’);
    $post_date = date(‘Y-m-d H:i:s’);

    これだと、PHP で設定されたタイムゾーンと WordPress で設定されたタイムゾーンがずれている場合、投稿時刻が狂います。海外のレンタルサーバーを使うとか、逆に日本にあるサーバーを海外在住者が使う場合は問題になりそうです。

    ご検討いただきたいのは、
    投稿日時(post_date, post_date_gmt)をメール送信のタイムスタンプ
    ではなくて、retrieveを実行する際の、post.phpにおけるinsert
    のタイムスタンプに設定する機能です。

    上述のように、post_date 独自フィルターを使えば要望された機能を実現することが可能ですので、わざわざ標準機能にする予定はありません。

    トピック投稿者 k.ueda

    (@kueda-1)

    shokun0803様
    ご指摘の通り、複数の投稿が同じ投稿時間になってしまいます。
    ですが、それよりはsubscribe2のダイジェスト配信から漏れる
    ことをなんとしても避けたいと思って、このような対処を考えて
    みました。

    lilyfan様
    こちらの都合ばかりで、

    ご検討いただきたいのは、…

    などと書いて失礼しました。何らかのアドバイスをいただければと
    思って、質問させていただくつもりが、勢い余って改造のお願いの
    ような表現になってしまいました。

    基本的に、改造は避けたいと思っていますので、
    教えていただいたように、post_date/ktai_entry.php フィルター
    で対応してみます。
    ありがとうございました。

3件の返信を表示中 - 1 - 3件目 (全3件中)
  • トピック「KtaiEntry+Subscribe2での投稿日時について」には新たに返信することはできません。