具有自定义分类和自定义字段筛选器的高级搜索表单

时间:2012-01-09 作者:pax

我想为特定的自定义帖子类型构建一个高级搜索表单,其中包含自定义帖子类型自定义字段、自定义分类以及单独的自定义帖子类型属性(字段和分类)的过滤器,这些属性将使用自定义关系字段链接到第一个帖子类型。

我最近开始使用WPs自定义帖子类型、字段和分类法,到目前为止我很喜欢它,但为了充分利用它,我希望能够正确地搜索它。我需要手动操作吗?如果是,如何?

附:如果有关系,我正在使用插件:Advanced Custom FieldsCustom Post Type UI.

下面我模拟了一个示例,说明了过滤的外观以及它与上面的帖子类型的关系。

wordpress custom search form filtered by custom fields and custom taxonomies

4 个回复
SO网友:Scott

我想你最好自己写这样的东西。

请看一下:http://www.catalysthomes.co.uk/homes-for-sale/

属性被加载到CPT中,我在侧栏中有自己的自定义搜索。其中,搜索包括许多内容,如分类法、自定义字段和按日期价格排序等。

那么我该如何实现这一点呢?我将表单提交到页面模板,然后在那里处理帖子数据,并根据搜索条件构建新的WP\\U查询。我使用会话存储搜索变量,以便对结果分页。

WP\\u查询功能非常强大。看一看:http://codex.wordpress.org/Class_Reference/WP_Query

在那里你可以使用meta_query 查询多个自定义字段并使用tax_query 查询分类法,还有更多。下面是我的想法。

Template File:

  <?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"); ?>

Raw Results

<?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\\"";
?>

Search Results

<?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\'
);
?>
List Layout只有一个标准的WP循环来显示帖子摘录和信息。

SO网友:Hexagon

尝试将Taxonomy Picker插件与Relevanssi一起使用。杀手组合。

http://www.squidoo.com/taxonomy-picker-wordpress-pluginhttp://wordpress.org/extend/plugins/relevanssi/

SO网友:Jens Wedin

看看Relevansi插件,它可能会满足您的需求:http://wordpress.org/extend/plugins/relevanssi/

SO网友:SteveR

如果有人在实现上面Brady的解决方案时遇到困难(正如我所做的那样),那么这里有一个提示:WordPress在传递会话数据方面似乎有一些问题,因此您可能需要做一些额外的工作才能使其正常工作。问题是discussed here

在函数中。php:

function init_sessions() {
  if (!session_id()) {
  session_start();
 }
}
add_action(\'init\', \'init_sessions\');
在模板中:

/**
* Enable sessions
*/
if (!session_id())
session_start();
为我安装Peter Wooster\'s“Simple Session Support“插件成功了。

结束

相关推荐

Search Using Post ID

我希望能够在搜索框中输入帖子ID,以便在搜索结果中返回准确的帖子。我还想保留搜索帖子/页面标题和内容的能力。例如,用户在搜索框中输入“#123”,搜索结果仅返回post 123。然而,如果我在搜索框中输入“123”,它将返回任何内容或标题中包含“123”的帖子/页面。This article 解释如何在管理中实现我所追求的目标-我只需要前端的同等功能!非常感谢您的帮助,谢谢。