将自定义字段添加到搜索

时间:2013-12-30 作者:Howdy_McGee

我正在尝试向搜索中添加自定义字段,以便可以通过元值对其进行优化。目前,我已在常规搜索中添加了一些选择列表:

<form role="search" action="<?php echo site_url(\'/\'); ?>" method="get" id="searchform">
    <input type="hidden" name="s" value="carcpt" /> <!-- // hidden \'products\' value -->

    <select name="price">
        <option value="">Nothing</option>
        <option value="500.00">500.00</option>
        <option value="100.00">100.00</option>
        <option value="50.00">50.00</option>
    </select>

    <select name="year">
        <option value="">Nothing</option>
        <option value="2011">2011</option>
        <option value="2007">2007</option>
        <option value="1991">1991</option>
    </select>

    <input type="submit" alt="Search" value="Search" />
</form>
在我的search.php 我有以下条件:

$q = get_search_query();
if($q = \'carcpt\'){

    $price = $_GET[\'price\'];
    $year = $_GET[\'year\'];

    $search = new WP_Query(
        array(
            \'post_type\' => \'carcpt\',
            \'meta_query\' => array(
                array(
                    \'key\' => \'_price\',
                    \'value\' => $price
                ),
                array(
                    \'key\' => \'_year\',
                    \'value\' => $year
                )
            )
        )
    );
}
这就是场景-我有两个问题:

1) 这似乎是一种通过自定义字段添加和优化我的搜索结果的非常“黑客”的方法-有更好/更广泛接受的方法吗?

2) 上述查询的问题是,如果用户没有输入价格或年份,它将运行查询并仅返回带有空价格/年份元的帖子。在我的查询中,是否有一种方法可以确定元是否为空并相应地修改我的查询-不包括开关?

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

1) 我认为您的解决方案在“正确的方式”方面是完全可以接受的-post meta是用于搜索的。对我来说似乎并不讨厌。

2) 您应该单独构建meta\\u查询:

$meta_query = array();

if( !empty( $_GET[\'price\'] ) ) {
    $meta_query[] = array( \'key\' => \'_price\', \'value\' => $_GET[\'price\'] );
}
if( !empty( $_GET[\'year\'] ) ) {
    $meta_query[] = array( \'key\' => \'_year\', \'value\' => $_GET[\'year\'] );
}

$search = new WP_Query( array(
    \'post_type\' => \'carcpt\',
    \'meta_query\' => $meta_query
) );
这样,您只能查询具有提供的非空值的元键。

我想指出,查询变量的修改最好在pre_get_posts 否则,将执行两个查询:一个用于搜索“carcpt”,另一个用于搜索“carcpt”帖子类型和元查询。

结束

相关推荐

无法使用WP_QUERY将“Search Value”和“Tax_Query”组合在一起

这是我在模板函数中的函数。php。问题是这是可行的:function ajax_search_action_do(){ global $wp_query; $search = $_POST[\'search_value\']; $country = $_POST[\'country_value\']; $args = array( \'s\' => $search,