当前位置: 首页 > 知识库问答 >
问题:

搜索

叶裕
2023-03-14

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

例如:文章"样本文章"在分类学"年份"中有术语"2018","组织"分类学中有术语"理事会成员","国家"分类学中有术语"加拿大"。文章“其他样本”中有“年份”一词“2016”,“组织”分类学一词“经理”,“国家”分类学一词“加拿大”。文章“第三篇文章”的分类学“年份”为“2018”,“组织”分类学为“安全团队”,“国家”分类学为“冰岛”。

我们希望能够通过所有这些术语过滤结果,所以如果我选择只查看年份=2018的帖子,我会得到“第三篇帖子”和“样本帖子”,但是如果我进一步按国家=加拿大过滤这些帖子,我只会获取“样本帖子”(因为过滤器将是年份=2018和国家=“加拿大”)。

我正在使用搜索

这是我的搜寻

echo do_shortcode( '[searchandfilter post_types="hr-priority" fields="year,country"]' );

这是我在自定义分类法模板中使用的代码(我为每个分类法创建了一个):

if (is_tax() || is_category() || is_tag() ){
        $qObj = get_queried_object();

        $args = array(
            'post_type'=>'hr-priority',
            'tax_query' => array( array(
                  'taxonomy' => $qObj->taxonomy,
                  'field' => 'id',
                  'terms' => $qObj->term_id
                )),
            'post_status'=>'publish',
            'posts_per_page'=>20
        );
    }
    echo($qObj->slug); //just to view the term/s being used
     $wpb_all_query = new WP_Query($args);
    if ( $wpb_all_query->have_posts() ) : ?>
        <?php
        /* Start the Loop */
        while ( $wpb_all_query->have_posts() ) : $wpb_all_query->the_post();

            get_template_part( 'template-parts/post/hr-priorities-post', get_post_format() );

        endwhile;

这是提交搜索后返回的网址

https://exampleurl.org/org/council-member?country=afghanistan&post_types=hr-priority-un

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

共有2个答案

施彬彬
2023-03-14

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

首先,我必须在我可能使用的每个分类法中获取术语的完整列表(这样,如果没有查询某个税,我可以为该税查询的术语提供一些值,而不是空字符串)=

    $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数组中执行此操作,但在该数组之外更容易读取),但需要使用关系=

      $tax_query = array(
      'relation' => 'AND',
      array(
        'taxonomy' => 'country',
        'field' => 'slug',
        'terms' => $country,
      ),
      array(
        'taxonomy' => 'org',
        'field' => 'slug',
        'terms' => $org,
      ),);

之后,就是同样的通用wp_query()

        $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() ) : ?>

用于找出解决方案的答案的引用列表(谢谢!):https://wordpress.stackexchange.com/a/35611/146095 https://wordpress.stackexchange.com/a/157167/146095

谭宏盛
2023-03-14

我不熟悉“搜索

$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,
);

参考文献

 类似资料:
  • 无论仓库里的代码量有多少,你经常需要查找一个函数是在哪里调用或者定义的,或者一个方法的变更历史。 Git 提供了两个有用的工具来快速地从它的数据库中浏览代码和提交。 我们来简单的看一下。 Git Grep Git 提供了一个 grep 命令,你可以很方便地从提交历史或者工作目录中查找一个字符串或者正则表达式。 我们用 Git 本身源代码的查找作为例子。 默认情况下 Git 会查找你工作目录的文件。

  • 搜索 调用地址 http://api.bilibili.cn/search 需要 App Key 参数 字段 必选 类型 说明 keyword true string 搜索的关键字,必须做URLencoding。 page false int 搜索结果分页选择 默认为第1页 pagesize false int 单页返回的记录条数,最大不超过100,默认为20。 order false strin

  • whereis 程序名称 查找软件的安装路径 -b 只查找二进制文件 -m 只查找帮助文件 -s 只查找源代码 -u 排除指定类型文件 -f 只显示文件名 -B 目录 在指定目录下查找二进制文件 -M 目录 在指定目录下查找帮助文件 -S 目录 在指定目录下查找源代码 locate 文件名称 在文件索引数据库中搜索文件 -d 数据库路径 搜索指定数据库 updatedb 更新文件索引数据库 fin

  • 我使用Elasticsearch允许用户输入要搜索的术语。例如,我要搜索以下属性'name': 如果使用以下代码搜索或,我希望返回此文档。 我尝试过做一个bool must和做多个术语,但它似乎只有在整个字符串都匹配的情况下才起作用。 所以我真正想做的是,这个词是否以任何顺序包含两个词。 有人能帮我走上正轨吗?我已经在这上面砸了一段时间了。

  • 大家好,根据搜索框中的conatiner图像在这里!我只是想问当用户在搜索框中键入一个名称时,应该显示特定的字段。我把我的视图。JSP代码也在这里吗?? vuew.jsp<%@page import=“com.privery.servicebuilder.service.blobdesolocalserviceutil”%><%@taglib uri=“http://java.sun.com/po

  • 我有以下格式的弹性搜索文档 } } 我的要求是,当我搜索特定字符串(string.string)时,我只想获得该字符串的FileOffSet(string.FileOffSet)。我该怎么做? 谢谢