多个类别的关键词搜索

时间:2016-07-14 作者:MHMediaServices

我已经为此花了一天左右的时间,我正在向社区寻求帮助。

首先,我正在努力实现以下目标:

Wordpress Multiple Category Search

在我的主题模板中,我有一个自定义搜索表单:

<form id="searchform" method="get" action="<?php bloginfo(\'url\'); ?>">
<fieldset>

    <input type="text" name="s" value="" placeholder="Search..."></input>
    <button type="submit">Search</button>
    <div class="clear"></div>
    <div class="search_category_section">
    <?php
        $args = array(\'parent\' => 0);
        $categories = get_categories($args);

        echo \'<div class="search_category_section">\';

        foreach ($categories as $category) {

        $thecatid = $category->cat_ID;
            echo \'<div class="categorylist"><div class="parent_category_list_item"><input id="\', $thecatid, \'" type="checkbox" name="category_name" value="\', $category->slug, \'"><label for="\', $thecatid, \'">\', $category->name, \'</label></input></div>\';
            $childcats=get_categories(array(\'parent\' => $thecatid));
                foreach($childcats as $c) {
                echo \'<div class="child_category_list_item"><input id="\', $c->cat_ID, \'" type="checkbox" name="category_name" value="\', $c->slug, \'"><label for="\', $c->cat_ID, \'">\', $c->name, \'</label></input></div>\';
            }
        echo \'</div>\';
        }
    ?>
    </div>
</fieldset>

例如,我搜索“关键字”,并选中两个复选框,“类别A”和“类别B”。我有两个帖子,每个类别一个。这两篇文章中的每一篇都有那个关键词。点击提交按钮后,会生成以下URL:

mydomain。com/?s=关键字(&M);category\\u name=a类(&U);category\\u name=b类

这篇文章目前正在做的是向我展示一个结果——也就是说,一篇来自B类的文章中有这个关键字。

我真正想要的是这个结果:

mydomain。com/?s=关键字(&M);category\\u name=a类、b类

这样我就可以得到所有类别的所有帖子,其中包含那个关键词。

我到处寻找,虽然我发现了其他人试图实现类似目标的结果,但他们的任何解决方案都不适合我。

这是我学习曲线的一部分。我找到了this plugin 看起来它能满足我的要求,但你们可能都处于这样的情况下,“我希望我能自己做这件事,这样我就能更好地理解Wordpress背后的机制”,我希望你们能理解这个问题。

提前谢谢,如果有什么不清楚或我遗漏了重要信息,请告诉我。

2 个回复
最合适的回答,由SO网友:MHMediaServices 整理而成

以下是对我有用的东西。

Pree这个答案几乎达到了目的,但没有设置任何数据。我需要找到一种访问数组中数据的方法,我使用内爆来实现这一点。

这是我的最后一段代码,它使我能够创建一个搜索表单,循环并显示类别,允许用户通过任意数量的类别进行关键字搜索,如果关键字存在于所选的任何类别中,则显示结果:

我创建了一个searchform.php 文件,包括以下HTML:

<form id="searchform" method="get" action="<?php bloginfo(\'url\'); ?>">
<fieldset>

    <input type="text" name="s" value="" placeholder="Search..."></input>
    <button type="submit">Search</button>
    <div class="clear"></div>
    <div class="search_category_section">
    <?php
        $args = array(\'parent\' => 0);
        $categories = get_categories($args);

        echo \'<div class="search_category_section">\';

        foreach ($categories as $category) {

        $thecatid = $category->cat_ID;
            echo \'<div class="categorylist"><div class="parent_category_list_item"><input id="\', $thecatid, \'" type="checkbox" name="category_name[]" value="\', $category->slug, \'"><label for="\', $thecatid, \'">\', $category->name, \'</label></input></div>\';
            $childcats=get_categories(array(\'parent\' => $thecatid));
                foreach($childcats as $c) {
                echo \'<div class="child_category_list_item"><input id="\', $c->cat_ID, \'" type="checkbox" name="category_name[]" value="\', $c->slug, \'"><label for="\', $c->cat_ID, \'">\', $c->name, \'</label></input></div>\';
            }
        echo \'</div>\';
        }
    ?>
        </div>
</fieldset>

然后,我的functions.php 具有以下代码:

<?php
    function advanced_search_query($query) {
        if($query->is_search()) {
            $get_the_category_name = $_GET[\'category_name\'];
            if (isset($get_the_category_name) && is_array($get_the_category_name)) {        
            $catnames = implode(",",$get_the_category_name);
            $query->set(\'category_name\', $catnames);
            return $query;
            }
        }
    }
    add_action(\'pre_get_posts\', \'advanced_search_query\');
    ?>
如果您这样做:

var_dump($get_the_category_name);
您将获得:

array(2) { [0]=> string(22) "category-a" [1]=> string(25) "category-b" } 
对其运行内爆()

string(48) "human-element-analysis,latent-defects-check-list" 
将该字符串粘贴到变量中,在查询中将其设置为category\\u name,win。

再次感谢Preethi为我指明了正确的方向,并希望以上内容能帮助任何希望这样做的人!

SO网友:Preethi Sasankan

let’s start by defining an HTML search form:

<form method="get" action="<?php bloginfo(\'url\'); ?>">
<fieldset>
<input type="text" name="s" value="" placeholder="search&hellip;" maxlength="50" required="required" />
<p>Refine search to posts containing chosen tags:</p>
<?php
// generate list of categories
$tags = get_categories();
foreach ($tags as $tag) {
    echo 
        \'<label>\',
        \'<input type="checkbox" name="taglist[]" value="\',  $tag->slug, \'" /> \',
        $tag->name,
        "</label>\\n";
}
?>
<button type="submit">Search</button>
</fieldset>
</form>

Add this to functions.php

function advanced_search_query($query) {

    if($query->is_search()) {

        // tag search
        if (isset($_GET[\'taglist\']) && is_array($_GET[\'taglist\'])) {
            $query->set(\'tag_slug__and\', $_GET[\'taglist\']);
        }

        return $query;
    }

}
add_action(\'pre_get_posts\', \'advanced_search_query\', 1000);

相关推荐

在WP搜索表单中是否有类似`wp_Dropdown_Categories()`的输入复选框选项?

我有自定义的帖子类型,当前正在使用wp_dropdown_categories() 在WP搜索表单中的功能,以便人们能够按薪资级别和工作类型进行筛选。是否有一个等效函数,以便用户可以使用输入复选框元素而不是<select> 元素,以便他们在进行搜索时可以选择多个工作类型或薪资水平?我似乎在开发者文档中找不到任何东西。我正在寻找的是允许复选框替换使用下面代码中的select选项的下拉元素的东西。<form method="get" action="<?p