أرغب في إنشاء نموذج بحث متقدم لنوع منشور مخصص معين ، مع وجود فلاتر للحقول المخصصة لأنواع المنشورات المخصصة ، والتصنيفات المخصصة ، ولخصائص أنواع منشورات مخصصة منفصلة (الحقول والتصنيفات) والتي ستكون روابط إلى الأول نوع المشاركة باستخدام حقل علاقة مخصص.
لقد بدأت مؤخرًا باستخدام أنواع منشورات WPs المخصصة ، والحقول ، والتصنيفات ، وأنا أحبها حتى الآن ، ولكن لتحقيق أقصى استفادة ، أود أن أكون قادرًا على البحث فيها بشكل صحيح. هل أحتاج إلى القيام بذلك يدويًا؟ إذا كان الأمر كذلك ، كيف؟
PS. إذا كان الأمر مهمًا ، فأنا أستخدم المكوّنات الإضافية: الحقول المخصصة المتقدمة و نوع المنشور المخصص 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 حلقة لإظهار مقتطفات النشر والمعلومات.
جرب البرنامج المساعد Picker معًا مع Relevanssi. مزيج القاتل.
http://www.squidoo.com/taxonomy-picker-wordpress-plugin http://wordpress.org/extend/plugins/relevanssi/
ألقِ نظرة على البرنامج المساعد Relevanssi ، فقد يفعل ما تبحث عنه: http://wordpress.org/extend/plugins/relevanssi/
إذا كان أي شخص يواجه صعوبة في تطبيق حل برادي أعلاه (كما فعلت) ، فهناك تلميح: يبدو أن WordPress لديه بعض المشاكل في تمرير بيانات الجلسة ، لذا ربما يتعين عليك القيام بشيء إضافي لجعله يعمل بشكل صحيح. القضايا نناقش هنا
في وظائف.
function init_sessions() {
if (!session_id()) {
session_start();
}
}
add_action('init', 'init_sessions');
في القالب الخاص بك:
/**
* Enable sessions
*/
if (!session_id())
session_start();
بالنسبة لي تثبيت بيتر ووستر " دعم الجلسة البسيط " قام البرنامج المساعد بالخدعة.