Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 搜寻及;WordPress中跨多个分类的筛选查询_Php_Wordpress_Search_Plugins_Filter - Fatal编程技术网

Php 搜寻及;WordPress中跨多个分类的筛选查询

Php 搜寻及;WordPress中跨多个分类的筛选查询,php,wordpress,search,plugins,filter,Php,Wordpress,Search,Plugins,Filter,我们有一个自定义的职位类型hr priority,它有多个与之相关的自定义分类。这些分类法包含多个术语,每个帖子可以从这些分类法中分配1到多个术语。我们正在尝试设置一个过滤器,允许访问者在多个分类中通过这些术语的组合来搜索/过滤结果 $allStates = get_terms('country', $args = array('hide_empty' => false)); $state_names = wp_list_pluck( $allStates, 'slug'

我们有一个自定义的职位类型hr priority,它有多个与之相关的自定义分类。这些分类法包含多个术语,每个帖子可以从这些分类法中分配1到多个术语。我们正在尝试设置一个过滤器,允许访问者在多个分类中通过这些术语的组合来搜索/过滤结果

    $allStates = get_terms('country', $args = array('hide_empty' => false));
    $state_names = wp_list_pluck( $allStates, 'slug' );
    $country = (get_query_var('country', $state_names));
例如: “样本职位”在分类法“年份”中有“2018”一词,“组织”分类法有“理事会成员”一词,“国家”分类法有“加拿大”一词。 “其他样本”一文在“年份”中有“2016”一词,“组织”分类法有“经理”一词,“国家”分类法有“加拿大”一词。 “第三个职位”在分类法“年份”中有“2018”一词,“组织”分类法有“安全团队”一词,“国家”分类法有“冰岛”一词

我们希望能够根据所有这些条件过滤结果,因此如果我选择仅查看2018年的帖子,我将获得“第三篇帖子”和“样本帖子”,但如果我进一步按照country=加拿大过滤这些帖子,我将只获得“样本帖子”(因为过滤器将是year=2018和country=“canada”)

我正在使用搜索和过滤插件。我尝试使用archive-hr-priority.php模板页面获取结果,但结果中根本无法识别该模板。然后,我使用了定制的分类模板,比如taxonomy-year.php,它只使用了一个过滤器,所以当我按year=2018进行过滤时,返回的帖子只有2018年的帖子,但当我添加第二个搜索词时,比如country=“canada”,它返回了country=canada的所有结果,但包含了所有年份的搜索词

这是我的搜索和筛选短代码:

echo do_shortcode( '[searchandfilter post_types="hr-priority" fields="year,country"]' );
这是我在自定义分类法模板中使用的代码(我为每个分类法创建了一个):

如何让它在多个分类中按多个术语进行筛选,并只返回与所有搜索参数匹配的结果?

我不熟悉“搜索和筛选”,但这看起来很容易用base
WP\u Query来完成。您可以使用以下内容跨多个分类进行搜索:

$tax_query = array(
  'relation' => 'AND'
);

// get query parameters and compose the condition
$year = $_GET['year'];
if (!empty($year)) {
  $cond = array(
    'taxonomy' => 'year',
    'field' => 'slug',
    'terms' => $year,
  ));
  $tax_query[] = $cond;
}
// Repeat for other parameters

$args = array(
  'post_type'=>'hr-priority',
  'tax_query' => $tax_query,  
  'post_status'=>'publish',
  'posts_per_page'=>20,
);

我从其他几个问题中找到了答案(见下面的引文列表)

首先,我必须在我可能使用的每个分类法中获取术语的完整列表(这样,如果没有查询一个税,我可以为该税查询的
'term'=>
值提供一些值,而不是空字符串),然后我将其转换为slug(下面第二行),然后使用
get\u query\u var()
函数从每个/任何分类中获取要查询的术语

    $allStates = get_terms('country', $args = array('hide_empty' => false));
    $state_names = wp_list_pluck( $allStates, 'slug' );
    $country = (get_query_var('country', $state_names));
然后,我将
get\u query\u var()
的值发送到一个数组中用于我的tax\u查询(我可以在
$args
数组中执行此操作,但在该数组之外更容易读取),但需要使用
'relation'=>和'
()来确保这些值都包含在查询args中:

      $tax_query = array(
      'relation' => 'AND',
      array(
        'taxonomy' => 'country',
        'field' => 'slug',
        'terms' => $country,
      ),
      array(
        'taxonomy' => 'org',
        'field' => 'slug',
        'terms' => $org,
      ),);
在那之后,它是相同的常规
wp\u query()

用于找出解决方案的答案的引用列表(谢谢!):

所以,我找到了解决方案。你的回答肯定有帮助,但我不需要
$\u GET
,我必须对我可能查询的每个分类法使用
GET\u query\u var
,然后将每个税务查询放在同一个数组中,但我确实需要在其中包含
'relationship'=>'和'
。@calwex718是的,看看答案修订。认为使用
$\u GET
更“安全”,因为我不知道S&F是如何工作的,也不知道它是否注册了VAR。下次我会指出的。很高兴它起作用了!
      $tax_query = array(
      'relation' => 'AND',
      array(
        'taxonomy' => 'country',
        'field' => 'slug',
        'terms' => $country,
      ),
      array(
        'taxonomy' => 'org',
        'field' => 'slug',
        'terms' => $org,
      ),);
        $args = array(
            'post_type'=>'hr-priority',
            'tax_query' => $tax_query,
            'post_status'=>'publish',
            'posts_per_page'=>20
        );
//  print_r($tax_query);
     $wp_all_query = new WP_Query($args);
    if ( $wp_all_query->have_posts() ) : ?>