1

この種の質問は、JanW:http ://bit.ly/VQy9hbに続くものです。

特定のメタデータ(この場合はmeta_name = "smartPrivate")を含む投稿を非表示にしようとしています。

以下の機能は機能しますが、残念ながらメニューループにも影響します(表示されなくなります)。

これらの投稿がすべてのループに表示されないようにする方法を知っている人はいますが、メニューには影響しません(そして誰が他に何を知っているか...)

よろしくお願いしますロブ

function hide_some_posts( $query ) {

    if (!is_user_logged_in()) {

        $query->set( 'meta_query', array(

            array(
                  'key' => 'smartPrivate',
                  'value' => 'smartPrivate_loggedIn',
                  'compare' => '!='
            ),
            array(
                  'key' => 'smartPrivate',
                  'value' => 'smartPrivate_loggedInMentors',
                  'compare' => '!='
            )

        ));
    }

  return $query;
}
add_filter( 'pre_get_posts', 'hide_some_posts' );
4

1 に答える 1

1

あなたの問題は、あなたの状況を正しく理解していれば、メインのクエリ以外のクエリに影響を与えることです。これがis_main_queryが存在する理由のほとんどです。だからこれを試してください:

function hide_some_posts( $query ) {


    if (!is_user_logged_in() && $query->is_main_query() ) {

        $query->set( 'meta_query', array(

            array(
                  'key' => 'smartPrivate',
                  'value' => 'smartPrivate_loggedIn',
                  'compare' => '!='
            ),
            array(
                  'key' => 'smartPrivate',
                  'value' => 'smartPrivate_loggedInMentors',
                  'compare' => '!='
            )

        ));
    }

  return $query;
}
add_filter( 'pre_get_posts', 'hide_some_posts' );
于 2013-01-08T18:11:51.240 に答える