按匹配词条的数量对帖子进行排序

时间:2011-04-15 作者:Bezbeli

我有一个表单,我将所有与帖子相关的术语列为复选框,用户应该选择其中的几个,点击搜索并获得所有与所选术语匹配的帖子。当有符合搜索条件的帖子时,它非常有效。我的问题是如何显示匹配项很少的帖子,以及如何根据匹配数对结果进行排序。非常感谢您的帮助。Thanx公司。

这是搜索页面中的表单:

<form action="<?php bloginfo(\'template_url\') ?>/build_search.php" method="post" accept-charset="utf-8">
<?php $terms = get_terms( \'my_tax\' );
$checkboxes = \'\';
foreach($terms as $term) :
    $checkboxes .=\'<input type="checkbox" name="term[]" value="\'.$term -> slug.\'" id="term-\'.$term->term_id.\'" /><label for="term-\'.$term->term_id.\'">\'.$term->name.\'</label>\';
endforeach;
print $checkboxes;
?>
<input id="submit" type="submit" value="Search">

这是我在build\\u search中输入的内容。php文件

if (isset($_POST["term"])){ $terms_array = array(); $terms_array = $_POST["term"]; foreach ($terms_array as $key => $value) { $string .= $value.\'+\'; } $terms_string = substr($string, 0, -1); $term = $terms_string; } else { $term = ""; } $url = header("Location:/?my_tax=$term");
之后,我只有分类法-my\\u tax。php中有规则循环。

1 个回复
SO网友:Bainternet

我能想到的唯一方法是创建一个二维数组,其中包含要输出的结果和匹配标记的数量。

例如:

$results = array();
$searched_tags = $_post[\'my_tax\'];
$searched_tags = explode("+", $searched_tags);
while (have_posts()){
    $the_post();
    $result[\'r\'] = \'<div class="post">
    <div class="title"><h2><a href="\'.get_permalink($post->ID).\'" title="\'.get_the_title($post->ID).\'">\'.get_the_title($post->ID).\'</a></h2></div>
    <div class="excerpt">\'.get_the_excerpt().\'</div>
    </div>\';
    //get current posts terms of the taxonomy
    $current_post_terms = wp_get_object_terms( $post->ID, \'my_tax\', array(\'orderby\' => \'name\', \'order\' => \'ASC\', \'fields\' => \'names\'));
    $matchs = 0;
    //check and count matchs
    foreach ($current_post_terms as $t){
        if (in_array($t,$searched_tags){
            $matchs = $matchs + 1;
        }
    }
    $result[\'m\'] = $matchs;
    //save results to array
    $results[] = $result;
}
//then sort array by matchs count
//quick sorting function
function cmp($a, $b) {
    if ($a[\'m\'] == $b[\'m\']) {
        return 0;
    }
    return ($a[\'m\'] > $b[\'m\']) ? -1 : 1;
}
//the actuall array sort
uasort($results, \'cmp\');
foreach ($results as $result){
    echo $result[\'r\'];
}
这是未经测试的,请尝试并报告。

结束

相关推荐

Refine Search Results

我正在寻找一种实现搜索过滤的简单方法,如下所示:http://ckclinical.co.uk/search/他们显然是在将人们指向一个空搜索,然后按类别进行过滤。我花了几个小时绕圈子:)谢谢。