问题描述
我想为特定的自定义帖子类型构建高级搜索表单,具有自定义帖子类型自定义字段,自定义分类法以及单独的自定义帖子类型属性 (字段和分类) 的过滤器,这些属性将链接到第一个后期类型使用自定义关系字段。
我最近开始使用 WPs 自定义帖子类型,字段和分类法,我很喜欢它,但是为了充分利用我想要正确搜索它。我需要手动做吗?如果是这样,怎么办?
PS 。如果重要,我正在使用插件:Advanced Custom Fields 和 Custom Post Type UI 。
下面我嘲弄了一个例子,说明过滤如何看待,以及它可能与上面的帖子类型有关。
最佳解决方案
我想这样的事情你最好写自己。
看一看:http://www.catalysthomes.co.uk/homes-for-sale/
属性被加载到 CPT 中,我在侧边栏中有自己的自定义搜索。搜索它搜索了许多事情,如分类法,自定义字段和按日期价格排序等。
那么我该如何实现呢?我将表单提交给页面模板,并从那里处理帖子数据,并根据搜索条件构建一个新的 WP_query 。我使用会话来存储搜索变量,以便我可以分页结果。
WP_Query 非常强大看看:http://codex.wordpress.org/Class_Reference/WP_Query
在那里,您可以使用 meta_query
查询多个自定义字段,并使用 tax_query
查询您的分类标准,还有更多。以下是我的建筑是为了给你一个想法。
模板文件:
<?php
$temp = $wp_query;
$wp_query = NULL;
$args = array();
?>
<?php include("functions/Homes-for-sale/propertyrawresults.php"); ?>
<?php include("functions/Homes-for-sale/propertysearchresults.php"); ?>
<?php
$args['post_type'] = "homes-for-sale";
$args['showposts'] = 10;
$args['paged'] = $paged;
$wp_query = new WP_Query($args);
?>
<?php include("functions/Homes-for-sale/propertylistlayout.php"); ?>
原始结果
<?php
if($_POST['sortby']) {
$_SESSION['prop_selectedsortby'] = $_POST['sortby'];
}
switch($_SESSION['prop_selectedsortby']) {
case "name-asc": $args['order'] = "ASC"; $args['orderby'] = "title"; break;
case "name-desc": $args['orderby'] = "title"; break;
case "price-asc": $args['order'] = "ASC"; $args['orderby'] = "meta_value_num"; $args['meta_key'] = "chb_homes_for_sale_specifics_fmv"; break;
case "price-desc": $args['orderby'] = "meta_value_num"; $args['meta_key'] = "chb_homes_for_sale_specifics_fmv"; break;
case "date-asc": $args['order'] = "ASC"; break;
default: /* No need to set arguments here as wp query defaults */ break;
}
$selectedsortby[$_SESSION['prop_selectedsortby']] = " selected="selected"";
?>
搜索结果
<?php
if( ! empty( $_SESSION['s_property_ptype'] ) ) {
$args['meta_query'][] = array(
'key' => 'chb_homes_for_sale_types_nbrs',
'value' => $_SESSION['s_property_ptype']
);
}
if( ! empty( $_SESSION['s_property_development'] ) ) {
$args['meta_query'][] = array(
'key' => 'chb_homes_for_sale_ofdevelopment',
'value' => $_SESSION['s_property_development']
);
}
if( isset( $_SESSION['s_property_area'] ) && 0 != $_SESSION['s_property_area'] ) {
$args['tax_query'][] = array(
'taxonomy' => 'areas',
'field' => 'id',
'terms' => array( (int) $_SESSION['s_property_area'] ),
);
}
$args['meta_query'][] = array(
'key' => 'chb_homes_for_sale_specifics_bedrooms',
'value' => $_SESSION['s_property_bedrooms_min'],
'compare' => '>=',
'type' => 'SIGNED'
);
$args['meta_query'][] = array(
'key' => 'chb_homes_for_sale_specifics_bedrooms',
'value' => $_SESSION['s_property_bedrooms_max'],
'compare' => '<=',
'type' => 'SIGNED'
);
$args['meta_query'][] = array(
'key' => 'chb_homes_for_sale_specifics_bathrooms',
'value' => $_SESSION['s_property_bathrooms_min'],
'compare' => '>=',
'type' => 'SIGNED'
);
$args['meta_query'][] = array(
'key' => 'chb_homes_for_sale_specifics_bathrooms',
'value' => $_SESSION['s_property_bathrooms_max'],
'compare' => '<=',
'type' => 'SIGNED'
);
$args['meta_query'][] = array(
'key' => 'chb_homes_for_sale_specifics_fmv',
'value' => $_SESSION['s_property_min_price'],
'compare' => '>=',
'type' => 'SIGNED'
);
$args['meta_query'][] = array(
'key' => 'chb_homes_for_sale_specifics_fmv',
'value' => $_SESSION['s_property_max_price'],
'compare' => '<=',
'type' => 'SIGNED'
);
?>
列表布局只是一个标准的 WP 循环来显示帖子摘录和信息。
参考文献
注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。