Biểu mẫu tìm kiếm nâng cao với các bộ lọc cho các nguyên tắc phân loại tùy chỉnh và các trường tùy chỉnh


30

Tôi muốn xây dựng một hình thức tìm kiếm nâng cao cho một loại bài đăng tùy chỉnh cụ thể, có các bộ lọc cho các loại bài tùy chỉnh trường tùy chỉnh, phân loại tùy chỉnh và cho một thuộc tính loại bài đăng tùy chỉnh riêng biệt (trường và phân loại) sẽ được liên kết đến đầu tiên loại bài sử dụng một trường quan hệ tùy chỉnh.

Gần đây tôi đã bắt đầu với các loại bài đăng, trường và phân loại tùy chỉnh của WP, tôi yêu thích nó cho đến nay nhưng để làm cho nó tốt nhất tôi muốn có thể tìm kiếm nó đúng cách. Tôi có cần phải làm bằng tay không? Nếu vậy thì thế nào?

Tái bút Nếu có vấn đề, tôi đang sử dụng các plugin: Trường tùy chỉnh nâng caoGiao diện người dùng loại bài tùy chỉnh .

Dưới đây tôi đã mô phỏng một ví dụ về cách lọc sẽ trông như thế nào và nó có thể liên quan đến các loại bài đăng ở trên như thế nào.

hình thức tìm kiếm tùy chỉnh wordpress được lọc bởi các trường tùy chỉnh và phân loại tùy chỉnh


Nếu bất cứ ai gặp khó khăn khi thực hiện giải pháp của Brady ở trên (như tôi đã làm) thì đây là một gợi ý: Có vẻ như Wordpress có một số vấn đề với việc truyền dữ liệu phiên, do đó bạn có thể sẽ phải làm gì đó để nó hoạt động chính xác. Các vấn đề được thảo luận ở đây: frank-verhoeven.com/USE-session-in-wordpress Đối với tôi, tôi đã cài đặt plugin "Hỗ trợ phiên đơn giản" của Peter Wooster. Có một liên kết đến plugin trong phần bình luận của bài viết.
SteveR

Câu trả lời:


16

Tôi nghĩ rằng một cái gì đó như thế này bạn sẽ là tốt nhất viết cho mình.

Hãy xem tại: http://www.cirthysthomes.co.uk/homes-for-sale/

Các thuộc tính được tải vào CPT và tôi có tìm kiếm tùy chỉnh của riêng mình trong thanh bên. Trong đó tìm kiếm nó tìm kiếm một số thứ như phân loại, trường tùy chỉnh và đặt hàng theo giá ngày, vv

Vậy làm thế nào để tôi đạt được điều này? Tôi gửi biểu mẫu đến một mẫu trang và từ đó tôi xử lý dữ liệu bài đăng và xây dựng WP_query mới dựa trên các tiêu chí tìm kiếm. Tôi sử dụng các phiên để lưu trữ các biến tìm kiếm để tôi có thể phân trang kết quả.

WP_Query rất mạnh mẽ. Hãy xem: http://codex.wordpress.org/Class_Reference/WP_Query

Trong đó bạn có thể sử dụng meta_queryđể truy vấn nhiều trường tùy chỉnh và sử dụng tax_queryđể truy vấn các nguyên tắc phân loại của bạn, ngoài ra còn có nhiều hơn nữa. Dưới đây là cách tôi được xây dựng để cung cấp cho bạn một ý tưởng.

Tệp mẫu:

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

Kết quả thô

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

kết quả tìm kiếm

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

Danh sách bố trí Chỉ cần một vòng lặp WP tiêu chuẩn để hiển thị các trích đoạn và thông tin bài đăng.


Xin chào Brady, Thx cho ví dụ này. Tôi có thể yêu cầu bạn, nếu có thể, để chia sẻ các hình thức? Trong đó, URL của bạn đang gửi nó là gì?
salocin

@salocin - Thông tin đó có thể nhận được bằng cách xem nguồn của trang trên URL đã cho trong câu trả lời
Brady

Brad Brady, vậy url của mẫu trang?
salocin

Các hình thức là trên catalysthomes.co.uk. Bạn có thể xem nguồn và xem biểu mẫu hoạt động như thế nào
Brady

Bạn có kiểm tra xem liệu các nguyên tắc phân loại tùy chỉnh có bài đăng với chúng như một trường tùy chỉnh không? Làm thế nào chính xác là bạn đang điền vào mẫu tìm kiếm? @Brady cảm ơn
Phil Hudson

2

Hãy thử plugin Taxonomy Picker cùng với Relevanssi. Kẻ giết người kết hợp.

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


điều này không tính đến các mối quan hệ bài đăng, đó là phần khó khăn trong vấn đề của tôi. Cách dễ dàng hơn để lọc các bài đăng theo phân loại, tôi cần lọc chúng mua phân loại (hoặc trường tùy chỉnh) của một bài liên quan.
pax

0

Hãy xem plugin Relevanssi, nó có thể làm những gì bạn đang tìm kiếm: http://wordpress.org/extend/plugins/relevanssi/


Nó không phù hợp với cách tiếp cận mà tôi cần (với các bộ lọc cụ thể), nhưng nó là một plugin rất thú vị, nó trông giống như một sự thay thế tuyệt vời cho chức năng tìm kiếm mặc định, cảm ơn rất nhiều vì đã chỉ ra nó.
pax

0

Nếu bất cứ ai gặp khó khăn khi thực hiện giải pháp của Brady ở trên (như tôi đã làm) thì đây là một gợi ý: Có vẻ như WordPress có một số vấn đề với việc truyền dữ liệu phiên, do đó bạn có thể sẽ phải làm gì đó thêm để làm cho nó hoạt động chính xác. Các vấn đề được thảo luận ở đây

Trong hàm.php:

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

Trong mẫu của bạn:

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

Đối với tôi, việc cài đặt plugin " Hỗ trợ phiên đơn giản " của Peter Wooster đã thực hiện thủ thuật này.


1
Chào Steve. Cảm ơn đã gửi câu trả lời đầu tiên của bạn ở đây. Vui mừng khi có bạn tại WPSE. Để tham khảo trong tương lai, câu trả lời không nên xoay vòng hoàn toàn trên một liên kết bên ngoài. Nếu liên kết bị vô hiệu hóa, câu trả lời của bạn trở nên lành tính. Bạn có phiền cập nhật câu trả lời của bạn với một vài đoạn mã mẫu có liên quan không?
Brian Fegter
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.