______UPDATE_______
हालांकि मैं ज्यादा से ज्यादा वोट मिल रहा है, और समाधान काम करता है, लेकिन cybmeta का जवाब वास्तव में इस सवाल का जवाब अच्छा और वर्डप्रेस 'जिस तरह से है। आपको कोशिश जरूर करनी चाहिए।
चरण 1
एक उन्नत खोज फ़ॉर्म बनाने के साथ शुरू करें, जिसके साथ आप चाहते हैं कि आपका उपयोगकर्ता वेबसाइट के साथ सहभागिता करेगा, और इसे एक नाम के साथ सहेजेगा (अर्थात मैंने इसे सहेज लिया है advanced-searchform.php
- लेकिन इसे searchform.php
तब तक न सहेजें जब तक यह वर्डप्रेस के डिफ़ॉल्ट खोज फ़ॉर्म को बदल न दे ):
<form method="get" id="advanced-searchform" role="search" action="<?php echo esc_url( home_url( '/' ) ); ?>">
<h3><?php _e( 'Advanced Search', 'textdomain' ); ?></h3>
<!-- PASSING THIS TO TRIGGER THE ADVANCED SEARCH RESULT PAGE FROM functions.php -->
<input type="hidden" name="search" value="advanced">
<label for="name" class=""><?php _e( 'Name: ', 'textdomain' ); ?></label><br>
<input type="text" value="" placeholder="<?php _e( 'Type the Car Name', 'textdomain' ); ?>" name="name" id="name" />
<label for="model" class=""><?php _e( 'Select a Model: ', 'textdomain' ); ?></label><br>
<select name="model" id="model">
<option value=""><?php _e( 'Select one...', 'textdomain' ); ?></option>
<option value="model1"><?php _e( 'Model 1', 'textdomain' ); ?></option>
<option value="model2"><?php _e( 'Model 1', 'textdomain' ); ?></option>
</select>
<input type="submit" id="searchsubmit" value="Search" />
</form>
फिर फॉर्म को निम्न की तरह अपने टेम्पलेट में कॉल करें:
<?php get_template_part( 'advanced', 'searchform' ); ?>
अब आपका खोज फ़ॉर्म तैयार है, और अब आप खोज फ़ॉर्म का उपयोग कर सकते हैं और URL में उपयोगकर्ता इनपुट ले सकते हैं।
चरण 2
बस आपको क्या चाहिए: डेटाबेस को क्वेरी करें और खोज क्वेरी के अनुसार पोस्ट प्रकार और उसके कस्टम फ़ील्ड को क्वेरी करें । याद रखें कि फॉर्म सबमिट करने के बाद आपकी खोज क्वेरी अब आपके द्वारा प्राप्त किया गया URL है। अब फॉर्म जमा करने पर वर्डप्रेस को अपने कस्टम खोज परिणाम पृष्ठ को लोड करने के लिए कहें। निम्न फ़ंक्शन को अपने स्थान पर रखें functions.php
ताकि वह डिफ़ॉल्ट के बजाय आपके कस्टम खोज टेम्प्लेट को सक्षम कर सके search.php
:
<?php
function wpse_load_custom_search_template(){
if( isset($_REQUEST['search']) == 'advanced' ) {
require('advanced-search-result.php');
die();
}
}
add_action('init','wpse_load_custom_search_template');
?>
डब्लूएसई (मैं रूट को भूल गया) से कहीं न कहीं मैं कोड लाया, लेकिन ऊपर दिए गए कोड का उपयोग करके विवाद है। लेकिन यह वास्तव में काम करता है ( लंगड़ा बहाना बेशक )।
दूसरे तरीके की जाँच करें @GM का सुझाव दिया।
चरण 3
एक नई फ़ाइल बनाएं और इसे सहेजें advanced-search-result.php
(क्योंकि हमने इस नाम का उपयोग किया था functions.php
) और अब आप स्वतंत्र हैं - जाहिर है। अवधारणा है:
- URL से डेटा को पकड़ो,
- एक साधारण का उपयोग करें
WP_Query()
(यदि आपकी क्वेरी जटिल है तो $wpdb
क्वेरी का उपयोग करें ),
- क्वेरी के भीतर कमांड पास करें, db से डेटा प्राप्त करें, और
- परिणाम दिखाएँ [s]
एक नमूना हो सकता है:
<?php
// Get data from URL into variables
$_name = $_GET['name'] != '' ? $_GET['name'] : '';
$_model = $_GET['model'] != '' ? $_GET['model'] : '';
// Start the Query
$v_args = array(
'post_type' => 'vehicle', // your CPT
's' => $_name, // looks into everything with the keyword from your 'name field'
'meta_query' => array(
array(
'key' => 'car_model', // assumed your meta_key is 'car_model'
'value' => $_model,
'compare' => 'LIKE', // finds models that matches 'model' from the select field
),
)
);
$vehicleSearchQuery = new WP_Query( $v_args );
// Open this line to Debug what's query WP has just run
// var_dump($vehicleSearchQuery->request);
// Show the results
if( $vehicleSearchQuery->have_posts() ) :
while( $vehicleSearchQuery->have_posts() ) : $vehicleSearchQuery->the_post();
the_title(); // Assumed your cars' names are stored as a CPT post title
endwhile;
else :
_e( 'Sorry, nothing matched your search criteria', 'textdomain' );
endif;
wp_reset_postdata();
?>
तो, यहाँ आपकी अंतिम बात है। लेकिन अभी भी कई चुनौतियाँ हैं:
- वैकल्पिक मूल्य - सभी क्षेत्रों या किसी भी क्षेत्र के साथ एक उन्नत खोज की जा सकती है , इसलिए आपको यह सुनिश्चित करना होगा कि खोज और डेटा के अनुसार क्वेरी सभी परिणाम ले रही है। आप
$wpdb
जटिल खोज परिणाम के लिए कस्टम SQL क्वेरी का उपयोग कर सकते हैं और यह शुद्ध MySQL होगा - वर्डप्रेस के पास कुछ भी नहीं है।
- स्वच्छता और मान्यता - ग्रंथ क्षेत्र और textarea बहुत कमजोर हैं जो आपकी साइट पर खराब अभ्यास का कारण बन सकते हैं। इसलिए कच्चा डेटा पास करना असुरक्षित होगा, आपको db क्वेरी में पास होने से पहले उन्हें Sanitize और Validate करना होगा। ( डेटा स्वच्छता और वर्डप्रेस के साथ मान्यता - TutsPlus )
- डिजाइनिंग - आप
page.php
(या search.php
) टेम्पलेट चुन सकते हैं और उसी के आधार पर इस पेज को बना सकते हैं ।
तो, आपको यह विचार मिल गया है, अब रास्ता तलाशने और खोजने की आपकी बारी है । याद रखें, हर किसी का तरीका अलग होता है। तुम्हारा बनाओ, ताकि मैं तुम्हारा अनुसरण कर सकूं। :)