搜索自定义分类标题而不是帖子本身

问题描述 投票:0回答:1

我有一个名为“rejectedpayments”的自定义帖子类型,我有一个名为“rejpayments-category”的自定义分类法,它已分配给此 CPT。然后我有一个存档模板,它只显示所有分类术语标题(不是实际的帖子),然后我可以单击分类术语标题以查看该分类中的所有帖子。此页面上有一个搜索字段,这就是我正在努力解决的问题。搜索只是按自定义帖子类型搜索,因此它会搜索“rejectedpayments”CPT 中的每个帖子,但我希望它只搜索实际的术语标题。

所以如果我有:

第一学期

  • 发布 1
  • 后2

第二学期

  • 发布 1
  • 后2

第三学期

  • 发布 1
  • 后2

目前,如果我搜索“帖子”,显然有 6 个帖子的标题带有此内容,所以它们出现了(它根本不搜索术语标题),所以标题、第 1 期、第 2 期和第 3 期是我的只想搜索。

表单上唯一的过滤器显然是 CPT 名称,但我不知道如何添加额外的过滤器,因此它也仅添加搜索词名称的参数。

<form role="search" action="<?php echo site_url('/'); ?>" method="get" id="searchform">
    <div class="row form-wrap">
        <div class="col-md-10 padding-none">
            <input type="text" name="s" placeholder="Search all rejected payments"/>
            <input type="hidden" name="post_type" value="rejectedpayments" />
        </div>
        <div class="col-md-2 padding-none">
            <input type="submit" alt="Search" value="Search" />
        </div>
    </div>
</form>

我当前的存档页面仅列出特定自定义帖子类型中的所有术语名称

<?php $wcatTerms = get_terms('rejpayments-category', array('hide_empty' => 0, 'parent' =>0)); 
  foreach($wcatTerms as $wcatTerm) : 
?>
<div class="results-table">
  <div class="row info-tables">
    <div class="col-md-6">   
      <a href="<?php echo get_term_link( $wcatTerm->slug, $wcatTerm->taxonomy ); ?>"><?php echo $wcatTerm->name; ?></a>
      <?php
        $wsubargs = array(
        'hierarchical' => 1,
        'show_option_none' => '',
        'hide_empty' => 0,
        'parent' => $wcatTerm->term_id,
        'taxonomy' => 'rejpayments-category'
         );
           $wsubcats = get_categories($wsubargs);
           foreach ($wsubcats as $wsc):
          ?>
          <p><a href="<?php echo get_term_link( $wsc->slug, $wsc->taxonomy );?>"><?php echo $wsc->name;?></a></p>
          <?php
            endforeach;
          ?>  
        </div>
        <div class="col-md-6"> 
           LINK
        </div>
     </div>
  </div>
  <?php 
     endforeach; 
  ?>
wordpress custom-taxonomy
1个回答
0
投票

以下更新可用于生成所需的搜索结果。

提交表格到存档页面

归档页面可以自己提交表单。表格

action
属性可以更改如下:

<form role="search" action="<?php echo $_SERVER['PHP_SELF']; ?>" method="get" id="searchform">

向提交按钮添加名称属性

<input name="submittedForm" type="submit" alt="Search" value="Search" />

获取未过滤的术语列表(默认)或通过搜索表单过滤的术语列表

/**
 * Untested code.
 * You may wish to change the ORDER BY clause.
 * 
 * @param string $searchKey Search key submitted from the search form.
 * 
 * @return object[] $wcatTerms Array of taxonomy term objects.
 */
function get_filtered_taxonomy_terms( $searchKey ) {
    global $wpdb;
    $custom_taxonomy = 'CUSTOM_TAXONOMY_NAME';

    $table_prefix = $wpdb->prefix;

    $sql  = "";
    $sql .= "SELECT T.term_id, T.slug, T.name, TT.term_taxonomy_id, TT.description, TT.parent, TT.count";
    $sql .= " FROM {$table_prefix}terms T";
    $sql .= " JOIN {$table_prefix}term_taxonomy TT ON ( TT.term_id = T.term_id )";
    $sql .= " WHERE TT.taxonomy = %s";
    $sql .= " AND T.name LIKE %s";
    $sql .= " ORDER BY T.name ASC";
    $sql .= ";";

    $prepared_sql = $wpdb->prepare(
        $sql,
        $custom_taxonomy,
        '%' . $wpdb->esc_like( $searchKey ) . '%'
    );
    $wcatTerms = $wpdb->get_results( $prepared_sql, 'OBJECT' );

    return $wcatTerms;
}

if ( isset( $_GET ) && isset( $_GET['submittedForm'] ) ) {
    // Search form submitted.
    // Find associative array of all terms (parents and children)
    // with term name partially matching the search key.
    $wcatTerms = get_filtered_taxonomy_terms( $_GET['s'] );

    ...

} else {
    // Default terms list.
    $wcatTerms = get_terms('rejpayments-category', array('hide_empty' => 0, 'parent' =>0));

    ...

}

渲染结果

使用分层术语,可以根据最大深度等使用不同的方法来呈现列表。可以扩展 WordPress Walker 类 并用于呈现列表。这种扩展的一个例子是 WordPress Walker_Nav_Menu 类.

© www.soinside.com 2019 - 2024. All rights reserved.