我正在构建一个搜索页面,以对自定义帖子类型及其关联的元和分类进行查询。最后,我将查询多个分类法,并将值与meta中的值进行比较(即,在X和Y之间用foo查找帖子)。
我对查询功能有很好的理解,这要感谢Otto 和Scribu. 问题是我正在努力找出如何通过表单传递变量。我的第一次尝试是尝试中推荐的方法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>
但同样,我无法提交表单/生成结果。
我走对了吗?欢迎提出任何建议。
最合适的回答,由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。