自定义WordPress搜索并使用$_GET[“s”]

时间:2012-01-12 作者:turbonerd

我的主题search.php 目前有一些“如果”语句来处理我的网站使用的不同类型的搜索。

我有一个站点范围的搜索,一个物种(自定义帖子类型)特定搜索和一个高级物种搜索。

对于“物种”搜索,我只添加了一个类似于<input type="hidden" name="type" value="species" />. 此搜索使用单个输入字段来搜索我的物种自定义帖子类型。如果用户正在寻找一种鱼的通用名或学名,他们可能会选择使用此搜索。

对于“高级物种”搜索,我使用了12种不同的输入(pH、大小、温度等)。我正在为构建一个$args数组meta_queryWP_Query 使用此数据分类,即:

array( \'key\' => \'genus\', \'value\' => $_GET["genus"] )

然而,结果是<input name="s"> 没有使用,因此表单操作不起作用(只加载索引页而不进行搜索)。

有没有更好的方法?很明显,我可以将“s”作为一个隐藏的输入发送,并带有一个通用值,但这是一种廉价而丑陋的处理方式。

也许这应该是一个独立于我们的搜索页面的页面?我更喜欢在search.php 虽然或将有一些多余的HTML结构等复制没有真正的原因。

提前感谢,

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

我最终接受了西蒙·斯卡夫的建议get_template_part.

为了防止任何人需要它,此页面(正在进行的工作)创建一个高级搜索表单,然后构建一个WP\\U查询来搜索自定义帖子类型:

<?php if (isset($_POST["act"]) && $_POST["act"] == "s") : ?>

<?php
    $meta_query = array(\'relation\' => \'AND\');

    if (!empty($_POST["s_genus"])) {
        $genus = array(
            \'key\' => \'genus\',
            \'value\' => $_POST["s_genus"],
            \'compare\' => \'LIKE\'
        );
        $meta_query[] = $genus;
    }

    if (!empty($_POST["s_species"])) {
        $species = array(
            \'key\' => \'species\',
            \'value\' => $_POST["s_species"],
            \'compare\' => \'LIKE\'
        );
        $meta_query[] = $species;
    }

    $args = array(
        \'post_type\' => \'species\',
        \'meta_query\' => $meta_query
    );

    get_template_part(\'searchresults\');
?>

<?php else : ?>

    <div id="content">
        <h2>ADVANCED<span class="lblue">SEARCH</span></h2>

        <form action="" method="post">
            <input type="hidden" name="act" value="s" />
            <fieldset id="taxonomy" style="margin-right: 15px;">
                <legend>Taxonomy</legend>
                <label for="genus">Genus</label>
                    <input class="full" type="text" name="s_genus" />
                <br />
                <label for="species">Species</label>
                    <input class="full" type="text" name="s_species" />
                <br />
                <label for="family">Family</label>
                    <input class="full" type="text" name="s_family" />
            </fieldset>
        </form>
    </div>
<?php endif; ?>
然后,在searchresults.php 我有一段代码,只需几行代码,然后对标准页面模板进行一次更改:

<?php global $args; ?>

<?php $query = new WP_Query ( $args ); ?>

<?php if ($query->have_posts()) : ?>
    <div class="post" id="post-<?php the_ID(); ?>">

    <p class="info">Search results for <em>&#8216;<?php echo $s ?>&#8217;</em></p>

    </div>
    <?php while ( $query->have_posts() ) : $query->the_post(); ?>
        <div class="post" id="post-<?php the_ID(); ?>">
            <h2><a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title(); ?>"><?php the_title(); ?></a></h2>

            <small><?php the_time(\'F jS, Y\') ?> &mdash; <?php the_time(\'h:i a\') ?> <?php edit_post_link(\'Edit\',\'<strong> |</strong> \',\'\'); ?> </small>

            <div class="entry">
                <?php the_content(\'Continue reading &raquo;\'); ?>
            </div>

            <p class="info"><?php comments_popup_link(\'Comment &raquo;\', \'1 comment &raquo;\', \'% comments &raquo;\'); ?> <strong>|</strong> <?php the_category(\', \') ?></p>
        </div>
    <?php endwhile; ?>
    <p align="center"><?php next_posts_link(\'&laquo; Previous Entries\') ?>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<?php previous_posts_link(\'Next Entries &raquo;\') ?></p><?php else : ?>

    <h2>Not Found</h2>

    <p>Sorry, but you are looking for something that isn\'t here.</p>
<?php endif; ?>

SO网友:dwenaus

如果你像你建议的那样使用这样的东西,为什么又便宜又难看?它使您不必重建整个搜索机制,也不必处理模板层次结构。正如你所说,它在搜索页面上共享html。去争取吧

结束

相关推荐

Checkboxed term search

有人知道我是否可以制作一个包含分类法中所有术语的复选框列表,并搜索属于选中术语的帖子吗?在复选框中列出类别也是一种奖励!