Searching Custom Fields

时间:2012-09-10 作者:urok93

我想知道如何设置一个表单(与普通搜索表单分开),允许我搜索特定的自定义帖子类型。

在我定义的自定义帖子类型中,我有两个字段。在搜索中,用户应该能够填写其中任何一项,以便缩小搜索范围。

有没有可以实现这一点的代码示例?

这就是我一直在尝试的。房屋名称存储为自定义帖子的标题,而城市和州是两个自定义字段。此搜索表单无法正常工作。

    <div id="primary">
        <div id="content" role="main">

        <?php

        global $wp_query;

        $housename=mysql_real_escape_string($_GET[\'housename\']);

        $city=mysql_real_escape_string($_GET[\'city\']);

        $state=mysql_real_escape_string($_GET[\'state\']);        

        $args = array(
                \'post_type\' => \'house\',
                \'post_title\' => $housename,
                \'meta_query\' => array(
                        array(
                            \'key\' => \'house_city\',                  
                            \'value\' => $city                            
                        ),
                        array(
                            \'key\' => \'house_state\',                  
                            \'value\' => $state                           
                        )  
                )                      
        );

        $houses_found = new WP_Query( $args );  

        if ( $houses_found->have_posts() ) :
            while ( $houses_found->have_posts() ) : $houses_found->the_post();
                echo \'<p><a href="\'.get_permalink().\'">\'.get_the_title().\'</a></p>\';

            endwhile;
        endif;

        wp_reset_postdata();

        ?>

        <form method="get" id="searchform" >
            <label for="housename"><?php _e( \'Name\' ); ?></label>
            <input type="text" class="field" name="housename" id="housename" />
            <label for="city" ><?php _e( \'City\' ); ?></label>
            <input type="text" class="field" name="city" id="city" />
            <label for="state" ><?php _e( \'State\' ); ?></label>
            <input type="text" class="field" name="state" id="state" />             
            <input type="submit" class="submit-2" name="submit" id="searchsubmit-2" value="<?php esc_attr_e( \'Search\' ); ?>" />
        </form>


            <?php while ( have_posts() ) : the_post(); ?>

                <?php get_template_part( \'content\', \'page\' ); ?>

            <?php endwhile; // end of the loop. ?>

        </div><!-- #content -->
    </div><!-- #primary -->

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

针对以下第一条评论更新了此答案:

if(!empty($_GET[\'city\']) AND !empty($_GET[\'state\']))
{ // if both fields are filled out, find houses that match both
$relation = "AND";
}
elseif(empty($_GET[\'city\']) OR empty($_GET[\'state\']))
{ // if either of the fields are empty, find houses that match either field
$relation = "OR";
}

$args = array(
     \'post_type\' => \'house\',
     \'post_title\' => $housename,
     \'meta_query\' => array(
     \'relation\' => $relation,// use $relation variable instead of string here
     array(
    \'key\' => \'house_city\',                  
    \'value\' => $city                            
     ),
     array(
    \'key\' => \'house_state\',                  
    \'value\' => $state                           
     )  
     )                      
);
我不确定,但我认为如果$housename是空的,那么会寻找带有空帖子标题的房子。您可能需要有条件地将该部分添加到查询中,类似这样的操作可能会起作用:

if(!empty($_GET[\'housename\']))
{
    $houseNameQuery = "\'post_title\' => $_GET[\'housename\']";
}
然后在$参数中替换“post\\u title”参数:

$args = array(
        \'post_type\' => \'house\',
        $houseNameQuery,
        \'meta_query\' => array(...

结束

相关推荐

从_Search_Query中去除+号

使用\\u search\\u查询在我的网站上显示搜索结果时,单词之间的空格将显示为+ 象征因此,如果访问者搜索“wordpress插件”,则搜索中的\\u search\\u查询输出。php返回 wordpress+plugins 如何删除+符号,和/或用非分隔符实体替换它,如。。。。。 wordpress plugins or wordpress&nbsp;plugins 我尝试过这种方法,但不起作用。。。。。 <?p