带有分类筛选器的CPT搜索表单&或

时间:2017-10-14 作者:Randomer11

我目前使用以下表格:

<form role="search" method="get" class="search-form" action="<?php echo home_url( \'/\' ); ?>">

        <input type="search" class="search-field" placeholder="<?php echo esc_attr_x( \'Type Business or Town\', \'placeholder\' ) ?>" value="<?php echo get_search_query() ?>" name="s" title="<?php echo esc_attr_x( \'Search for:\', \'label\' ) ?>" />

        <input type="text" value="<?php echo get_query_var(\'location\'); ?>" name="location" id="location" class="headersearch location" placeholder="<?php esc_attr_e( \'Enter your county..\', \'search-cust\' ); ?>" />

        <input type="hidden" name="post_type" value="business" />
        <input type="submit" class="button radius tiny success" style="width: 100%;" value="<?php esc_attr_e( \'Search...\', \'search-cust\' ); ?>" />
</form>
我在函数中也有这个。php:

    function custom_cpt_search( $query ) {
       if ( is_search() && $query->is_main_query() && $query->get( \'s\' ) ){
            $query->set(\'post_type\', array(\'business\'));
        }
        return $query;
    };
add_filter(\'pre_get_posts\', \'custom_cpt_search\');
理想情况下,我希望将第二个输入作为下拉式分类法列表,而不是输入中的类型,理想情况下,列出分类法中的所有类别,而不是仅列出其中包含帖子的类别。第一个下拉项是占位符,例如“选择您的县”。

编辑以使其更清楚,并删除我已解决的部分问题。

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

在Misha回答了上述问题后,一个灯泡亮了起来,这让我更加了解了一些东西,这就是现在使用wp\\U下拉菜单\\U类别和一些参数按预期工作的表单。

我以前是这样做的,但以前的主要问题似乎是它在URL中搜索ID而不是slug,出于某种原因ID找不到帖子,但使用slug找到了(如果有人能告诉我为什么这对我的学习很有帮助)

这是工作表单,注意(位置)是我的自定义分类法,因此任何使用它的人都需要更改它以匹配他们的分类法。

<form role="search" method="get" class="search-form" action="<?php echo home_url( \'/\' ); ?>">

        <input type="search" class="search-field" placeholder="<?php echo esc_attr_x( \'Search Business or Service\', \'placeholder\' ) ?>" value="<?php echo get_query_var(\'business\'); ?>" name="s" title="<?php echo esc_attr_x( \'Search for:\', \'label\' ) ?>" />

            <?php $location_args = array(\'taxonomy\' => \'location\', \'value_field\' => \'slug\', \'name\' => \'location\', \'show_option_none\' => __( \'Select County\' ),\'option_none_value\' => \'0\', \'order\' => \'ASC\', \'hide_empty\' => 0); ?> 
            <?php wp_dropdown_categories($location_args); ?>

   <input type="hidden" name="post_type" value="business" />
    <input type="submit" class="button" style="width: 100%;" value="<?php esc_attr_e( \'Search...\', \'custom\' ); ?>" />

</form>

SO网友:Misha Rudrastyh

我认为可以通过以下两个步骤来完成:

在HTML代码中,只需添加一个包含所需值的下拉列表即可。

<select name="yourselect"><option value="1">Value 1</option>

...

</select>
在您的pre_get_posts 筛选器添加tax_query 像这样的参数

if( !empty( $_GET[\'yourselect\'] ) ) {
    $query->set(\'tax_query\', array(
        array(
            \'taxonomy\' => \'YOUR_TAXONOMY_NAME\',
            \'field\' => \'id\', // or slug if you want
            \'terms\' => $_POST[\'yourselect\']
        )
    );
}
我不确定这样配置默认的WordPress搜索是否是个好主意。几个月前,我已经使用AJAX过滤器实现了类似的功能。这里有个例子,希望能有所帮助https://rudrastyh.com/wordpress/ajax-post-filters.html

结束

相关推荐

Custom Search Results Page

我正在尝试创建自定义搜索结果页面。我不允许直接编辑php文件。我一直在使用[include\\u php]短代码来编写尽可能少的php代码。我试图让用户远离默认的“帖子”页面,因此,当用户搜索时,我想要一个自定义页面,将用户链接到我自己构建的页面,而不是相应的帖子页面。有没有办法不用编辑php文件就能做到这一点?