web-dev-qa-db-ja.com

(2つのクエリを使用せずに)最初にスティッキポストが取得されるようにしますか。

私は無限スクロールで使用するためにページ付けを維持する必要があります。

最初にスティッキーポストを取得するようにquery_postsに指示する方法はありませんか?

これは、ホームページ上の標準的なワードプレスのブログではデフォルトの動作のようですが、私が言うことができることから、ページ用のカスタムテンプレートでは少し厄介になります。

ありがとうございました。

現在のクエリを表示するように編集された:

query_posts( array( 
    'post_type' => array('post', 'careers-post'),
    'paged' => $paged,
    'posts_per_page' => 6,
    'category__in' => $page_categories,
    'ignore_sticky_posts' => 0
) );

編集2:"category__in"は過去の付箋投稿と競合しているようです: http://wordpress.org/support/topic/category_in -ampamp-sticky

確認のために、「category__in」を削除しても、予想通りにスティッキーポストが一番上に表示されますが、明らかに問題は解決しません。

3
Kayo

ソースコードを掘り下げてみると、 'category__in'によって結果の順序が崩れるような奇妙なロジックを見つけることができませんでした。もしそうなら、 WordPress Trac にバグを登録してください。

データベースに特有の別の問題や、以前にカスタムコードによってデータが操作された方法に依存している可能性があるため、この種の問題を再現することも困難です。

とにかく、ちょっとした努力であなたはいつもこの種の問題を回避することができます。これはあなたのクエリ結果をフィルタリングしてスティッキ投稿をトップに送るものです。

add_filter('the_posts', 'bump_sticky_posts_to_top');
function bump_sticky_posts_to_top($posts) {
    $stickies = array();
    foreach($posts as $i => $post) {
        if(is_sticky($post->ID)) {
            $stickies[] = $post;
            unset($posts[$i]);
        }
    }
    return array_merge($stickies, $posts);
}

あなたの質問を6投稿に制限したので、処理時間に大きな影響を与えるとは思わない。このフィルタが特定のクエリを使用しているときにのみ実行されるように、関数内に追加のチェックを入れることもできます(最悪の場合を除き、WPが2倍になることが考えられますすでに行っています)。

それが役に立てば幸い!それがどのようになるのか教えてください。

9
Tomas Buteler