web-dev-qa-db-ja.com

メインクエリからスティッキーポストを除外しますか?

私はこれで多くの問題を抱えています。スライダーにはスティッキが使用されているので、私のホームページのメインクエリから投稿を除外するために<?php query_posts( array( 'post__not_in' => get_option( 'sticky_posts' ), 'paged' => get_query_var( 'paged' ) ) ); ?>を使用していました。私はwordpress.orgのためにこのテーマを作っています、そしてそれは推奨されないと言われました。私はそれから私のfunctions.phpにこれを追加しようとしたが無駄に:

/**
 * Excluding sticky posts from home page. Sticky posts are in a slider.
 *
 * @since 0.1
 */
function essential_exclude_sticky( $query ) {

    /* Exclude if is home and is main query. */
    if ( is_home() && $query->is_main_query() )
        $query->set( 'ignore_sticky_posts', true );

}

`

私が間違っていることについて何か考えはありますか?

5
Steven

query_postsを壊すのでお勧めしません

あなたは本当に親切ですが、関数自体を宣言するだけではうまくいきません。あなたは hook 関数を何かにする必要があります。あなたの場合、これはpre_get_postsになります。

例( "名前空間"関数を使用)

<?php
// this is key!
add_action('pre_get_posts', 'wpse74620_ignore_sticky');
// the function that does the work
function wpse74620_ignore_sticky($query)
{
    // sure we're were we want to be.
    if (is_home() && $query->is_main_query())
        $query->set('ignore_sticky_posts', true);
}
5
chrisguitarguy

私にとっては、ignore_sticky_postsを使用するとスティッキーな投稿が上部に表示されなくなりますが、それでも他の投稿と時系列で表示されます。

メインクエリからスティッキーポストを除外するために、get_option('sticky_posts')post__not_inを使用しています。

<?php
/**
 * Exclude sticky posts from home page.
 */
function theme_name_ignore_sticky_posts($query){
  if (is_home() && $query->is_main_query())
    $query->set('post__not_in', get_option('sticky_posts'));
}
add_action('pre_get_posts', 'theme_name_ignore_sticky_posts');
?>
3
Nelu