从Wordpress搜索中排除多个自定义分类术语

时间:2018-09-02 15:52:03

标签: php wordpress search custom-taxonomy hook-wordpress

我从Wordpress搜索结果中排除了将自定义分类设置为特定术语的任何帖子或自定义帖子。我希望能够简单地添加更多的分类法和术语(例如在数组中),而不必具有重复的功能,并确保我高效地做到了。

任何人都可以建议一种更清洁的功能来容纳这个功能吗?

if __name__ == '__main__':

1 个答案:

答案 0 :(得分:2)

您可以先尝试将数组中的所有数据首先定义为分类法/术语对(我已将数组嵌入到外部函数中,但是可以直接将其添加到挂钩函数中) 。这样,您可以轻松添加或删除数据。

然后,我们使用一个foreach循环来读取和设置税收查询中的数据。因此,您的代码将类似于:

// HERE set in the array your taxonomies / terms pairs
function get_custom_search_data(){
    return [
        'site_search' => [ 'exclude_page' ],
        'job_status'  => [ 'closed' ],
    ];
}

/* Exclude from WordPress Search using custom taxonomy */
add_action( 'pre_get_posts', 'multiple_taxonomy_search', 33, 1 );
function multiple_taxonomy_search( $query ) {
    if ( is_admin() || ! $query->is_main_query() ) {
        return;
    }

    // Exclude Terms by ID from Search and Archive Listings
    if ( is_search() || is_tax( 'marque' ) ) {
        // Set the "relation" argument if the array has more than 1 custom taxonomy
        if( sizeof( get_custom_search_data() ) > 1 ){
            $tax_query['relation'] = 'AND'; // or 'OR'
        }

        // Loop through taxonomies / terms pairs and add the data in the tax query
        foreach( get_custom_search_data() as $taxonomy => $terms ){
            $tax_query[] = [
                'taxonomy' => $taxonomy,
                'field' => 'slug', // <== Terms slug seems to be used
                'terms' => $terms,
                'operator' => 'NOT IN',
            ];
        }

        // Set the defined tax query
        $query->set( 'tax_query', $tax_query );
    }
}

代码进入您的活动子主题(或活动主题)的function.php文件中。未经测试,它应该可以工作。