サポート » 使い方全般 » get_lastpostmodifiedでカスタム投稿タイプの最終更新日時を取得するときの返値

  • 解決済 mikaumoto

    (@mikaumoto)


    get_lastpostmodifiedについて使い方が間違っているのか、確信がないためご存じの方が居たら教えてください。

    自分がしたかったのはあるカスタム投稿タイプの最終更新日時を取得したいということでした(例:post_type=news)。それをするためにget_lastpostmodified(‘blog’,’news’)のようにしてみたのですが、実際の最終更新日時とは異なる値が返ってきてしまいました。

    codexでは引数が1つしかないように見えるのでもしかして「自分の使い方が間違っている?」という可能性もあるのですが。

    上記関数の該当のコード wp-includes/post.php を見ると引数は2つあり、2つめの引数にpost_typeが指定できるように思われます。

    そのため、2つめの引数にpost_typeを指定すれば、そのカスタム投稿タイプの「最終更新日時 post_modified」が取得できると思って利用してみたのですが、予測した値と違うものが返されました。

    コード上でデバッグログを取って調べたところ、

    $lastpostmodified = _get_last_post_time( $timezone, ‘modified’, $post_type );

    ここでは、post_type別の「最終更新日時 post_modified」が取得できるのですが、その下にある

    $lastpostdate = get_lastpostdate( $timezone );
    if ( $lastpostdate > $lastpostmodified ) {
    $lastpostmodified = $lastpostdate;
    }

    この部分で、$lastpostmodified に get_lastpostdate( $timezone ); の値が上書きされていて、最終的にこの値が返されているようでした。

    この部分のコードの意図が少しわからなかったのですが、更新日時よりも公開日時(post_date)の方が大きいとき(予約投稿の場合など)に公開日時(post_date)を「最終更新日時」とする、というロジックかと思います。post_type内での公開日時(post_date)が返ってくるということであれば、そちらでも運用上は良いかと思います。
    ※ 本題とはずれますがget_lastpostdateという関数があるので、可能であればget_lastpostmodifiedは最終更新日時 post_modifiedのみが返った方が使い勝手的にはいいのかも

    しかしこのget_lastpostdateに第2引数が指定されていないため、’any’状態で最終投稿日時が取得されるため、あるpost_typeの最新投稿日時でも最新更新日時でもない値が返ってくるのではないかと思いました。

    実際には自分でコードを書いて取得は出来るのですが、関数で取得できるとありがたいのでこの関数の意図などわかったらと思いました。

    そもそも自分がなにか勘違いしている可能性も考えて(関数の意図を理解していない可能性?)このフォーラムに書いてみた次第です。ご意見いただけますとうれしいです。よろしくお願いします。

    • このトピックは mikaumotoが1 ヶ月、 3 週間前に変更しました。
    • このトピックは mikaumotoが1 ヶ月、 3 週間前に変更しました。
2件の返信を表示中 - 1 - 2件目 (全2件中)
  • こんにちは

    おっしゃる通りの動作で、不具合な感じがします。

    こちらのチケットで対応が漏れている様子です。
    https://core.trac.wordpress.org/ticket/17455

    現在お困りでしたら、当面は get_lastpostmodified フィルターフックで、と思いましたが、このフィルターフックも post_type 渡してもらえないですね・・・

    不具合として trac に新たなチケット投げられてはいかがでしょうか。

    munyaguさん、返信ありがとうございます!

    勘違いすることが多いので、こちらに投稿してご意見いただければうれしいなと思っていたので返信いただけて心強く思いました。

    たぶん

    $lastpostdate = get_lastpostdate( $timezone );
    if ( $lastpostdate > $lastpostmodified ) {
    $lastpostmodified = $lastpostdate;
    }

    $lastpostdate = get_lastpostdate( $timezone , $post_type);
    if ( $lastpostdate > $lastpostmodified ) {
    $lastpostmodified = $lastpostdate;
    }

    とすれば、制作した方の意図通り(更新日より投稿日の方が大きいものがあれば返す)にカスタム投稿タイプのときもなると思いました。コードを修正して確認したところそのように動作しました。

    英語の説明が難しいので この行をこうすると意図通りになるのでは?的に書いてみようと思います。

2件の返信を表示中 - 1 - 2件目 (全2件中)
  • このトピックに返信するにはログインが必要です。