it-swarm.asia

نموذج بحث متقدم مع مرشحات للتصنيفات المخصصة والحقول المخصصة

أرغب في إنشاء نموذج بحث متقدم لنوع منشور مخصص معين ، مع وجود فلاتر للحقول المخصصة لأنواع المنشورات المخصصة ، والتصنيفات المخصصة ، ولخصائص أنواع منشورات مخصصة منفصلة (الحقول والتصنيفات) والتي ستكون روابط إلى الأول نوع المشاركة باستخدام حقل علاقة مخصص.

لقد بدأت مؤخرًا باستخدام أنواع منشورات WPs المخصصة ، والحقول ، والتصنيفات ، وأنا أحبها حتى الآن ، ولكن لتحقيق أقصى استفادة ، أود أن أكون قادرًا على البحث فيها بشكل صحيح. هل أحتاج إلى القيام بذلك يدويًا؟ إذا كان الأمر كذلك ، كيف؟

PS. إذا كان الأمر مهمًا ، فأنا أستخدم المكوّنات الإضافية: الحقول المخصصة المتقدمة و نوع المنشور المخصص UI .

فيما يلي سخرت من مثال على كيفية ظهور التصفية وكيف يمكن أن يكون مرتبطًا بأنواع المنشورات أعلاه.

wordpress custom search form filtered by custom fields and custom taxonomies

30
pax

أعتقد أن شيئًا كهذا سيكون من الأفضل لك كتابة نفسك.

ألقِ نظرة على: 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 حلقة لإظهار مقتطفات النشر والمعلومات.

16
Brady

جرب البرنامج المساعد Picker معًا مع Relevanssi. مزيج القاتل.

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

2
Hexagon

ألقِ نظرة على البرنامج المساعد Relevanssi ، فقد يفعل ما تبحث عنه: http://wordpress.org/extend/plugins/relevanssi/ ​​

0
Jens Wedin

إذا كان أي شخص يواجه صعوبة في تطبيق حل برادي أعلاه (كما فعلت) ، فهناك تلميح: يبدو أن WordPress لديه بعض المشاكل في تمرير بيانات الجلسة ، لذا ربما يتعين عليك القيام بشيء إضافي لجعله يعمل بشكل صحيح. القضايا نناقش هنا

في وظائف.

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

في القالب الخاص بك:

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

بالنسبة لي تثبيت بيتر ووستر " دعم الجلسة البسيط " قام البرنامج المساعد بالخدعة.

0
SteveR