কাস্টম ক্ষেত্রগুলির জন্য অনুসন্ধান ফর্ম তৈরি করা


11

আমি গাড়ী ডিলারশিপের জন্য একটি থিম তৈরি করেছি। প্রতিটি গাড়ি একটি কাস্টম পোস্টের ধরণের ("যানবাহন"), এবং মেক, মডেল, মাইলেজ, জ্বালানীর প্রকার ইত্যাদির মতো প্রায় 12 টি কাস্টম ফিল্ড রয়েছে and

সুতরাং মূলত হোম পৃষ্ঠায় আমি একটি অনুসন্ধান ফর্ম চাই যা মেক ও মডেলের জন্য তালিকাগুলি ড্রপ করে এবং যে কোনও উপলভ্য মেকস বা মডেল রয়েছে।

আমি এটির জন্য বছরের জন্য 2 টি বিকল্প থাকতে চাই, যাতে শেষ ব্যবহারকারী "2006" এবং "2012" নির্বাচন করতে পারেন এবং অনুসন্ধান ফলাফলগুলিতে সেই দুটি সংখ্যার মধ্যে বছরের সাথে সমস্ত যানবাহন রয়েছে।

সেখানে কি এমন কোনও প্লাগইন রয়েছে যা এটি করতে পারে ??

থানকিউ কোনও সাহায্যের জন্য .. এটি আমাকে ঘন্টার পর ঘন্টা পাগল করছে !!!!


আমি মনে করি আপনি এটি ব্যবহার করতে পারেন, প্লাগ-ইন আপনাকে আরও ভাল ওয়ার্ডপ্রেস.আর.জি.
প্লাগইনস / ডাব্লুপি- কাস্টম- ফিল্ডস-সার্চ-দীনেশ ভীমনি

ধন্যবাদ .. তবে এটি কীভাবে প্রকৃত অনুসন্ধান ফর্মটি তৈরি করবেন তা ব্যাখ্যা করে না। মানে আমি এইচটিএমএলে ফর্মটি প্রোগ্রাম করতে পারি, তবে আমি কীভাবে এটি কার্যকর করতে পারি ?!
এবিডিজিটাল

উত্তর:


16

______UPDATE_______
যদিও আমি আরও বেশি বেশি ভোট পাচ্ছি, এবং সমাধানটি কাজ করে তবে সাইবমেটার উত্তরটি আসলে উত্তর এবং ওয়ার্ডপ্রেসের উপায়। আপনার অবশ্যই এটি চেষ্টা করা উচিত

ধাপ 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 টি। ফর্মটি জমা দেওয়ার পরে এখন ওয়ার্ডপ্রেসকে আপনার কাস্টম অনুসন্ধান ফলাফল পৃষ্ঠাটি লোড করতে বলুন। নিম্নলিখিত ফাংশনটি আপনার মধ্যে রাখুন 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');
?>

আমি ডাব্লুপিএসই থেকে কোথাও কোড এনেছি (আমি মূলটি ভুলে গিয়েছি), তবে উপরের কোডটি ব্যবহার করে বিতর্ক রয়েছে। তবে এটি আসলে কাজ করে ( অবশ্যই লম্বা বাহানা )।

@ জিএম প্রস্তাবিত অন্য উপায় চেক করুন ।

ধাপ 3

একটি নতুন ফাইল তৈরি করুন এবং এটি সংরক্ষণ করুন advanced-search-result.php(কারণ আমরা এই নামটি ব্যবহার করেছি functions.php) এবং এখন আপনি মুক্ত - স্পষ্টতই। ধারণাটি হ'ল:

  • ইউআরএল থেকে ডেটা ধরুন,
  • একটি সাধারণ ব্যবহার করুন WP_Query()(যদি আপনার প্রশ্নটি জটিল হয় তবে $wpdbক্যোয়ারীটি ব্যবহার করুন ),
  • প্রশ্নগুলির মধ্যে কমান্ডগুলি পাস করুন, ডিবি থেকে ডেটা আনুন এবং
  • ফলাফল দেখান [গুলি]

একটি নমুনা হতে পারে:

<?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জটিল অনুসন্ধানের ফলাফলের জন্য আপনি কাস্টম এসকিউএল কোয়েরি ব্যবহার করতে পারেন এবং এটি খাঁটি মাইএসকিউএল হবে - ওয়ার্ডপ্রেসের কিছুই নেই।
  • স্যানিটাইজেশন এবং বৈধকরণ - পাঠ্য ক্ষেত্র এবং পাঠ্যগ্রন্থাগুলি এতটা দুর্বল যা আপনার সাইটে খারাপ অভ্যাসের কারণ হতে পারে। সুতরাং কাঁচা তথ্য পাস করা নিরাপদ হবে, ডিবি ক্যোয়ারিতে যাওয়ার আগে আপনার স্যানিটাইজ এবং বৈধকরণ করতে হবে। ( ওয়ার্ডপ্রেসের সাথে ডেটা স্যানিটাইজেশন এবং বৈধকরণ - টুটসপ্লস )
  • ডিজাইনিং - আপনি page.php(বা search.php) টেমপ্লেটটি চয়ন করতে পারেন এবং এর ভিত্তিতে এই পৃষ্ঠাটি তৈরি করতে পারেন।

সুতরাং, আপনি ধারণা পেয়েছেন, তবুও এটিকে এখন, অন্বেষণ এবং আবিষ্কার করার পালা উপায় । মনে রাখবেন, প্রত্যেকের উপায় আলাদা। আপনার তৈরি করুন, যাতে আমি আপনাকে অনুসরণ করতে পারি। :)


সময় নেওয়ার জন্য থ্যাঙ্কিউ, আপনারা অত্যন্ত দয়ালু। আপনি কি জানেন যে আমি কীভাবে এটি করতে পারি তাই "মেকস" এর ড্রপ ডাউন মেনুটি স্বয়ংক্রিয়ভাবে কোনও যানবাহনের পোস্টে প্রবেশ করা কোনও মেক দেখায়?

খুশী হবে যদি এটি আপনার পক্ষে কাজ করে। :)
মইনুল ইসলাম

আপনি কি জানেন যে আমি কীভাবে এটি করতে পারি তাই "মেকস" এর ড্রপ ডাউন মেনুটি স্বয়ংক্রিয়ভাবে কোনও যানবাহনের পোস্টে প্রবেশ করা কোনও মেক দেখায়?
এবিডিজিটাল

একটি WP_Query()কাস্টম ফিল্ড পরামিতি ব্যবহার করে ফলাফলগুলি লুপটি <option>গুলি দেখান ।
মায়নুল ইসলাম

আমি এই "উন্নত অনুসন্ধান" pre_get_postsহুক ব্যবহার করে সম্পন্ন হয়েছে তা দেখতে চাই এবং দ্বিতীয় লুপ নয়।
সাইবমেটা

23

যদিও @ মায়িনুলআইসলামের উত্তর কাজ করতে পারে, তবে আমি মনে করি উন্নত অনুসন্ধান করার সঠিক উপায়টি pre_get_postsঅ্যাকশন হুক ব্যবহার করা ।

পদক্ষেপ 1: অনুসন্ধান ফর্ম

এই ধাপে অন্যান্য উত্তরে ধাপ 1 এর সমান, শুধু পরিবর্তন idএর nameক্ষেত্র ( <input type="text" ...>সার্চ করার জন্য ব্যবহৃত "s" এর মধ্যে সংরক্ষণ এই কোড তাই এটি অনুসন্ধান ক্ষেত্র যেমন জন্য সরাসরি ব্যবহার করা হবে। advanced-searchform.phpআপনার থিম ফোল্ডারের অধীনে। তারপর, ব্যবহার get_template_part( 'advanced', 'searchform' );করার জন্য আপনি যেখানে এটি আপনার থিমটিতে প্রদর্শিত হতে চান সেখানে এটি লোড করুন:

<?php /**`advanced-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="s" class=""><?php _e( 'Name: ', 'textdomain' ); ?></label><br>
    <input type="text" value="" placeholder="<?php _e( 'Type the Car Name', 'textdomain' ); ?>" name="s" 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 2', 'textdomain' ); ?></option>
    </select>

    <input type="submit" id="searchsubmit" value="Search" />

</form>

পদক্ষেপ 2: অনুসন্ধান অনুসন্ধানে ফিল্টার যুক্ত করুন

add_action( 'pre_get_posts', 'advanced_search_query' );
function advanced_search_query( $query ) {

    if ( isset( $_REQUEST['search'] ) && $_REQUEST['search'] == 'advanced' && ! is_admin() && $query->is_search && $query->is_main_query() ) {

        $query->set( 'post_type', 'vehicle' );

        $_model = $_GET['model'] != '' ? $_GET['model'] : '';

        $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
                            )
                        )
        );
        $query->set( 'meta_query', $meta_query );

    }
}

পদক্ষেপ 3: টেম্প্লেটিং (alচ্ছিক)

এই পদ্ধতির সাহায্যে, ওয়ার্ডপ্রেসের ডিফল্ট অনুসন্ধান টেম্পলেটটি কোনও গৌণ অনুসন্ধানের প্রয়োজন ছাড়াই ফলাফলগুলি ফিল্টার করতে ব্যবহৃত হবে। আপনি যদি উন্নত অনুসন্ধানের জন্য অন্য কোনও টেম্পলেট ব্যবহার করতে চান তবে আপনি template_includeফিল্টারটি ব্যবহার করতে পারেন । উদাহরণস্বরূপ, আপনি যদি advanced-search-template.phpউন্নত অনুসন্ধান ফর্মের ফলাফলগুলির জন্য টেমপ্লেট হিসাবে ফাইলটি ব্যবহার করতে চান :

add_action('template_include', 'advanced_search_template');
function advanced_search_template( $template ) {
  if ( isset( $_REQUEST['search'] ) && $_REQUEST['search'] == 'advanced' && is_search() ) {
     $t = locate_template('advanced-search-template.php');
     if ( ! empty($t) ) {
         $template = $t;
     }
  }
  return $template;
}

3
ওয়ার্ডপ্রেস পথের জন্য আপনাকে অনেক ধন্যবাদ। স্রেফ এটির সাথে কাজ করেছি এবং এটি দুর্দান্ত। :)
মায়নুল ইসলাম
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.