我正在尝试构建一个高级搜索表单,允许用户从两个基于分类法的下拉菜单中进行选择。每个分类下拉列表都有分类术语,用户可以从中选择多个术语。当他们做出选择时,应将其转发到搜索结果页面,该页面可查询和显示匹配的结果。我试着从这篇文章改编:http://fearlessflyer.com/how-to-create-an-advanced-search-form-for-wordpress/.
我有一个名为“recipe”的自定义帖子类型,其中有两个分类法,分别是“膳食类型”和“烹饪”。分类法有以下术语:
膳食类型
晚餐、早餐、菜肴
当您选择晚餐和美式或早餐和法式时,以下代码可以正常工作,但当您在分类下拉列表中选择多个术语时,则无法正常工作。从逻辑上讲,当一个人选择并提交法语和美语时,应该显示包含法语或美语的帖子。但是,它不起作用。其功能应类似于以下高级搜索:http://cooking.nytimes.com/search?
我认为问题在于,我不知道如何通过$\\u POST将多个分类术语提交到搜索页面,以便查询并显示在结果页面上。
谢谢
功能。php
function buildSelect($tax){
$terms = get_terms($tax);
$x = \'<select multiple="multiple" name="\'. $tax .\'">\';
$x .= \'<option value="">Select \'. ucfirst($tax) .\'</option>\';
foreach ($terms as $term) {
$x .= \'<option value="\' . $term->slug . \'">\' . $term->name . \'</option>\';
}
$x .= \'</select>\';
return $x;
}
主页
<form method="post" action="<?php bloginfo(\'url\');?>/listing-search-results/">
<?php $taxonomies = get_object_taxonomies(\'recipe\');
foreach($taxonomies as $tax){
echo buildSelect($tax);
}
?>
<input type="submit"/>
</form>
搜索结果页面
<?php
$list = array();
$item = array();
foreach($_POST as $key => $value){
if($value != \'\'){
$item[\'taxonomy\'] = htmlspecialchars($key);
$item[\'terms\'] = htmlspecialchars($value);
$item[\'field\'] = \'slug\';
$list[] = $item;
}
}
$cleanArray = array_merge(array(\'relation\' => \'AND\'), $list);
$args[\'post_type\'] = \'recipe\';
$args[\'showposts\'] = 9;
$paged = (get_query_var(\'paged\')) ? get_query_var(\'paged\') : 1;
$args[\'paged\'] = $paged;
$args[\'tax_query\'] = $cleanArray;
$the_query = new WP_Query( $args );
?>
<?php echo ($the_query->found_posts > 0) ? \'<h3 class="foundPosts">\' . $the_query->found_posts. \' listings found</h3>\' : \'<h3 class="foundPosts">We found no results</h3>\';?>
<?php while ( $the_query->have_posts() ) : $the_query->the_post();?>
//add our code here i.e. the_title();
<?php endwhile; wp_reset_postdata();?>
<div class="row page-navigation">
<?php next_posts_link(\'« Older Entries\', $the_query->max_num_pages) ?>
<?php previous_posts_link(\'Newer Entries »\') ?>
</div>
最合适的回答,由SO网友:TheDeadMedic 整理而成
主要问题是$_POST
环$value
是一个数组,但您可以应用htmlspecialchars
它会吐出来,什么也不会回来。
如果尚未这样做,请设置WP_DEBUG
到true
在您的wp-config.php
- 没有it的发展根本不是一种选择。
不管怎样,让我们把它弄脏$_POST
回路:
$tax_query = array(); // Don\'t need relation "AND", it\'s the default
foreach ( get_object_taxonomies( \'recipe\' ) as $tax ) {
if ( isset( $_POST[ $tax ] ) ) {
$tax_query[] = array(
\'taxonomy\' => $tax,
\'terms\' => wp_unslash( ( array ) $_POST[ $tax ] ),
\'field\' => \'slug\',
);
}
}
$args[\'tax_query\'] = $tax_query;