将表单输入传递到多分类查询

时间:2011-10-02 作者:nfaust

我正在构建一个搜索页面,以对自定义帖子类型及其关联的元和分类进行查询。最后,我将查询多个分类法,并将值与meta中的值进行比较(即,在X和Y之间用foo查找帖子)。

我对查询功能有很好的理解,这要感谢OttoScribu. 问题是我正在努力找出如何通过表单传递变量。我的第一次尝试是尝试中推荐的方法this post, 但我不会返回任何结果(地址栏显示:http://sitename.com/?brand=22. 这是我的第一次尝试(“品牌”是我的分类名称之一):

<form action="<?php echo home_url(\'/\'); ?>" method="get">
    <p><?php wp_dropdown_categories(\'taxonomy=brand&name=brand\'); ?></p>
    <p><input type="submit" value="Search!" /></p>
</form>
像这样一个简单的HTML表单就足够了吗?或者我应该在我的函数中构建一个函数。php文件?

我的第二次尝试是合并一个函数:

<?php
function get_terms_dropdown($taxonomies, $args){
    $myterms = get_terms($taxonomies, $args);
    $output =\'<select multiple="yes" size="3" name="\'.$taxonomies.\'">\';
    foreach($myterms as $term){
        $root_url = get_bloginfo(\'url\');
        $term_taxonomy=$term->taxonomy;
        $term_slug=$term->slug;
        $term_name =$term->name;
        #$link = $root_url.\'/\'.$term_taxonomy.\'/\'.$term_slug;
        #$link = $term_taxonomy;
        $output .="<option value=\'".$term_name."\'>".$term_name."</option>";
    }
    $output .="</select>";
return $output;
}
$args = array(\'orderby\'=>\'count\',\'hide_empty\'=>true);
?>


<form role="search" method="get" id="searchform" action="<?php bloginfo(\'home\'); ?>">
<?php echo get_terms_dropdown(array(\'brand\'), $args); ?>
<input type="submit" id="searchsubmit" value="Search" />
</form>
但同样,我无法提交表单/生成结果。

我走对了吗?欢迎提出任何建议。

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

您提到,在第一次尝试时,您获得了URLhttp://sitename.com/?brand=22 这是正确的,因为您使用了一个get方法,但您没有说明查询使用的代码。

就我个人而言,我将此用于我的表格,并同意wdalhaj使用post而不是get

<form id="brandsearch" method="post" action="">
  <select name="brand" id="brand">
    <option value="">All</option>
<?php
$theterms = get_terms(\'brand\', \'orderby=name\');
foreach ($theterms AS $term) :
    echo "<option value=\'".$term->slug."\'".($_POST[\'brand\'] == $term->slug ? \' selected="selected"\' : \'\').">".$term->name."</option>\\n";
endforeach;
?>
  </select>
</form>
然后用于构建查询

$myquery[\'post_type\'] = \'custom-post-name\';
$myquery[\'posts_per_page\'] = -1; // only used if you want all results on one page
$myquery[\'tax_query\'] = array();

if (!empty($_POST[\'brand\'])) :
    $brand = $_POST[\'brand\'];
    $myquery[\'tax_query\'][] = array(
        \'taxonomy\' => \'brand\',
        \'terms\' => array($brand),
        \'field\' => \'slug\',
    );
endif;

query_posts($myquery);
您可以使用页面模板或快捷码将表单放入标准页面(请参见http://codex.wordpress.org/Function_Reference/add_shortcode) 但最好还是为搜索查询和结果创建一个页面模板。

SO网友:wdalhaj

这是一个有点棘手的解决方案,但它是有效的:

首先,您必须创建一个页面模板,然后创建一个使用该模板的页面,并为其命名,例如“advanced\\u search”。(如果需要,可以将其从显示中排除)。

对该页面执行表单操作(高级搜索)。

现在,通过常规post方法传递数据,并通过超级全局变量$\\u post[]在之前制作的页面模板中接收数据。

现在,您可以使用通过post方法获得的变量进行查询。

以下是更多提示:

-如果不起作用,您可以始终使用$wpdb对象安全有效地与WordPress数据库交互。

-使用以下命令通过回显来调试查询字符串:<?php echo $query_string; ?>

它总是关于如何使用WordPress。

结束

相关推荐

tag search using WP_Query

我只需要找到带有标签的帖子forest gump. 我尝试过:new WP_Query(\'tag=forest+gump\');, new WP_Query(\'tag=forest gump\');. 然而,他们都会返回所有的帖子,而不仅仅是带有forest gump 标签但是,单个标记(没有空格)可以正常工作。替代方案(如普通SQL)也可以使用。入口标记行为forest gump, forrest gump, questend.