13 Replies

  1. is_sticky()apply_filters( 'is_sticky', $is_sticky, $post_id ); とあるので、タグやカスタムフィードでスティッキーだよという情報をどこかに保存して、そのフィルターでテーマ側に知らせればスティッキーの機能自体は使える。

  2. ただ、Twenty Seventeen の場合、アーカイブ表示でホーム以外はスティックさせないようになっている

  3. ん、class-wp-query.php に以下のラインがある

    てことは option_sticky_posts フィルター使って、Sticky 該当するタームの関連付けポストを探してって手もあるが。DB クエリが増える。

    となると、その Sticky タームが入った時点で sticky_posts をアップデートするとか。

    1. なんで if ( $this->is_home ってホーム以外はスティッキーしないようにしてるんだ。別の場所でできるようにすると、クエリ数が増えて遅くなるからかな。

      $this->is_home の値をいじると副作用ありそうなのでやめとくとなると、クエリの結果を編集するか。それかテーマ側でガンっとハードコードしてしまうか。

  4. うーん。ちょっと無理っぽいね。別途 WP_Query でポストを取得したとしてもそれをテーマで表示させようとすると、the_post() とか the_content() とか、get_the_ID()wp_list_comments() 内で呼ばれてるし、イタレート中のアイテムを内部から参照するような関数がいたるところで呼ばれてて、これ弄るのはちょっと副作用が出てきそう。

    setup_postdata()wp_reset_postdata() の中覗いたら、割りかし処理が重い。

  5. ページド表示の場合、スティックさせないようにした。

    この一連の方法について記事にまとめようか。もう少し時間置いて使ってみて、不具合がでてこないか様子見よう。

  6. アーカイブビューの Recent Posts Widget にノートカスタム投稿タイプのスティッキーが入ってきてしまっている。

    1. これはクエリオブジェクトをグローバルでリファレンスしてたのが問題。the_posts フィルターのコールバックの2つ目のパラメーターから WP_Query オブジェクトにアクセスできる。そこから対象の投稿タイプをチェックすればOKできた。

Add a Postscript

Your email address will not be published. Required fields are marked *