問題描述

我嘗試使用以下程式碼在 pre_get_posts 鉤子上新增稅務查詢:

    // Add custom posts to main query (archive and home)
add_action( 'pre_get_posts', 'add_post_types_to_query' );

function add_post_types_to_query( $query ) {
    if ( (is_home() || is_category() || is_search()) && $query->is_main_query() && !is_admin() )
    {
        // Query all posts on index and category pages
        $query->set( 'post_type', array( 'post', 'page', 'definition', 'video', 'data_vizualization', 'quizz', 'talk', 'question', 'study', 'bibliography' ) );

        $workspace_taxonomy_query =
                    array(array(
                        'taxonomy ' =>  'workspace',
                        'field'     =>  'slug',
                        'terms'     =>  array('particulier'),
                        'operator'  =>  'IN'
                    ));
        $query->tax_query->queries[] = $workspace_taxonomy_query;
        $query->set( 'tax_query', $workspace_taxonomy_query);
    }
    return $query;
}

此程式碼給出以下 where 子句:「0 = 1」 。哪裡不對?這是好鉤嗎?在主查詢完成之前,如何正確新增分類過濾器?

感謝提前答覆!

最佳解決方案

你有一個 syntax-ish 錯誤,或一個拼寫錯誤。 tax_query 陣列中的”taxonomy” 之後有一個空格。如果這是它的總和,我會發表評論,但另外 $query->tax_query->queries[] = $workspace_taxonomy_query; 線是毫無意義的。沒有或沒有變化。不要試圖破壞陣列。只需使用 $query->set( 'tax_query', $workspace_taxonomy_query); 如下 (使用我的測試環境中存在的分類法和術語):

// Add custom posts to main query (archive and home)
add_action( 'pre_get_posts', 'add_post_types_to_query' );

function add_post_types_to_query( $query ) {
    if ( (is_home() || is_category() || is_search()) && $query->is_main_query() && !is_admin() )
    {
        // Query all posts on index and category pages
        $query->set( 'post_type', array( 'post', 'page', 'definition', 'video', 'data_vizualization', 'quizz', 'talk', 'question', 'study', 'bibliography' ) );

        $workspace_taxonomy_query =
                    array(
                      array(
                        'taxonomy' =>  'post_tag',
                        'field'     =>  'slug',
                        'terms'     =>  array('test-4'),
                        'operator'  =>  'IN'
                      )
                    );
        $query->tax_query->queries[] = $workspace_taxonomy_query;

    }
    return $query;
}

參考文獻

注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。