带有用于自定义分类法和自定义字段的过滤器的高级搜索表单


30

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

我最近开始使用WP的自定义帖子类型,字段和分类法,到目前为止,我还是很喜欢它,但是为了充分利用它,我希望能够对其进行正确的搜索。我需要手动做吗?如果是这样,怎么办?

PS。如果有关系,我将使用插件:高级自定义字段自定义帖子类型UI

下面,我模拟了一个示例,该示例显示了过滤的外观以及与上面的帖子类型之间的关系。

由自定义字段和自定义分类过滤的WordPress自定义搜索表单


如果有人在执行上述布雷迪的解决方案时遇到困难(就像我所做的那样),则有一个提示:似乎Wordpress在传递会话数据方面存在一些问题,因此您可能需要做一些额外的工作才能使其正常工作。这里讨论了这些问题:frank-verhoeven.com/using-session-in-wordpress对于我来说,安装Peter Wooster的“简单会话支持”插件很有效。在帖子的评论部分有一个指向插件的链接。
SteveR 2012年

Answers:


16

我认为像这样的事情你最好自己写。

看看: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循环以显示帖子摘录和信息。


嗨,布雷迪,这个例子是Thx。请问是否可以分享表格?在其中,将其提交到哪个URL?
salocin

@salocin-可以通过在给定的URL上查看答案页面中的信息来获得该信息
Brady

thx Brady,那么页面模板的url?
salocin

表格在cataloghomes.co.uk上。您可以查看源代码,看看形式如何工作
布雷迪

您是否正在检查自定义分类法是否将其作为自定义字段发布?您如何准确填写搜索表单?@Brady谢谢
Phil Hudson

2

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

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


这并没有考虑到职位关系,这是我问题中最困难的部分。通过分类法过滤帖子更容易,我需要过滤它们,以购买相关文章的分类法(或自定义字段)。
pax

0

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


它不适合我需要的方法(带有特定的过滤器),但是它是一个非常有趣的插件,它看起来像是默认搜索功能的绝佳替代品,非常感谢您指出它。
pax 2012年

0

如果有人(如我所做的那样)难以实施上述布雷迪的解决方案,则有一个提示:看来WordPress在传递会话数据方面存在一些问题,因此您可能需要做一些额外的工作才能使其正常工作。在这里讨论问题

在functions.php中:

function init_sessions() {
  if (!session_id()) {
  session_start();
 }
}
add_action('init', 'init_sessions');

在您的模板中:

/**
* Enable sessions
*/
if (!session_id())
session_start();

对我来说,安装Peter Wooster的“ 简单会话支持 ”插件可以解决问题。


1
嗨,史蒂夫。感谢您在这里发布您的第一个答案。很高兴有您加入WPSE。为了将来参考,答案不应该完全围绕外部链接。如果链接被禁用,您的答案将变为良性。您介意通过几个示例相关的代码片段来更新您的答案吗?
Brian Fegter 2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.