0

まず、タイトルについて申し訳ありませんが、これを一言で説明する方法がわかりません!

メタ キーを持つ main_query から投稿/ページを削除するクエリがあります。

ただし、特定のページ (フロント ページ) では、単一のカテゴリ (フロント ページのニュース) でフィルター処理したいと考えています。以下のコードを追加しようとしましたが、壊れます。

誰でもこれを改良するのを手伝ってくれますか?

わかりやすくするために、meta_keys をグローバルにフィルター処理し、meta_keys と 1 つのテンプレート、front-page.php のみのカテゴリでフィルター処理します。

`関数 hide_private_posts( $query ) {

// If user isn't logged in, hide all private posts / pages
if( !is_user_logged_in() ) {

    if ( $query->is_main_query() ) {

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

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

        ));
    }

    // If user is logged in but a learner, show logged in posts / pages
    } else if( is_user_sso_role( array('learner') ) ) {

    if ( $query->is_main_query() ) {

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

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

        ));
        }

    } // Else don't filter posts and pages

    if ( is_front_page() ) {
        query_posts( $query . '&category_name=front-page-news' );
    }

return $query;
}
add_filter('pre-get-posts' , 'hide_private_posts');`
4

1 に答える 1

0

OK - これを締めくくるために。

私が使用していたクエリはquery_posts、ループをリセットし、以前に配置された meta_queries をオーバーライドするようです。

したがって、これは正常に機能し、meta_query フィルタリングを保持します。

if ( $query->is_home() && $query->is_main_query() ) {
    $query->set( 'category_name', 'front-page-news');
}
于 2013-04-16T12:47:21.063 に答える