কাস্টম পোস্ট ধরণের জন্য কাস্টম অনুসন্ধান কীভাবে তৈরি করবেন?


44

আমার ব্লগ পোস্টগুলির জন্য অনুসন্ধানের ক্ষেত্র রয়েছে তবে কাস্টম পোস্ট ধরণের জন্য আমার অন্য একটি প্রয়োজন। আমি কীভাবে এই পৃথক অনুসন্ধান ফলাফলের বিন্যাস সহ এই কাস্টম অনুসন্ধান ফর্মটি তৈরি করতে পারি ?

উত্তর:


61

এখানে আমি চেষ্টা করেছি এবং 3 টি পদক্ষেপ সহ একটি সমাধান পেয়েছি। ধরা যাক আপনার কাস্টম পোস্টের ধরণটি " পণ্য "

ঘ। এখানে ফাংশন কোড যুক্ত করুন আপনি সংরক্ষণাগার-অনুসন্ধান.php নির্দিষ্ট করতে পারেন

function template_chooser($template)   
{    
  global $wp_query;   
  $post_type = get_query_var('post_type');   
  if( $wp_query->is_search && $post_type == 'products' )   
  {
    return locate_template('archive-search.php');  //  redirect to archive-search.php
  }   
  return $template;   
}
add_filter('template_include', 'template_chooser');    

ঘ। কাস্টম পোস্ট প্রকারের জন্য অনুসন্ধান ফলাফল টেম্পলেট তৈরি করুন (সংরক্ষণাগার-অনুসন্ধান.এফপি)

        <?php
        /* Template Name: Custom Search */        
        get_header(); ?>             
        <div class="contentarea">
            <div id="content" class="content_right">  
                     <h3>Search Result for : <?php echo "$s"; ?> </h3>       
                     <?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>    
                <div id="post-<?php the_ID(); ?>" class="posts">        
                     <article>        
                    <h4><a href="<?php the_permalink(); ?>" title="<?php the_title(); ?>"><?php the_title(); ?></a></h4>        
                    <p><?php the_exerpt(); ?></p>        
                    <p align="right"><a href="<?php the_permalink(); ?>">Read     More</a></p>    
                    <span class="post-meta"> Post By <?php the_author(); ?>    
                     | Date : <?php echo date('j F Y'); ?></span>    

                    </article><!-- #post -->    
                </div>
        <?php endwhile; ?>
    <?php endif; ?>




           </div><!-- content -->    
        </div><!-- contentarea -->   
        <?php get_sidebar(); ?>
        <?php get_footer(); ?>
  1. অনুসন্ধান ফর্মটি তৈরি করুন
    এই অনুসন্ধান ফর্মটিতে, "পণ্যগুলি" মানটি লুকানো আছে এবং এটি কেবলমাত্র পণ্য পোস্টগুলি অনুসন্ধান করবে ।

     <div>   
        <h3>Search Products</h3>
        <form role="search" action="<?php echo site_url('/'); ?>" method="get" id="searchform">
        <input type="text" name="s" placeholder="Search Products"/>
        <input type="hidden" name="post_type" value="products" /> <!-- // hidden 'products' value -->
        <input type="submit" alt="Search" value="Search" />
      </form>
     </div>

আরো জানার জন্য, আমি এখানে আপনার লিঙ্ক করতে চান
http://www.wpbeginner.com/wp-tutorials/how-to-create-advanced-search-form-in-wordpress-for-custom-post-types/


টিপ: পোস্টের ধরণটি নিবন্ধকরণ করার সময়, সর্বজনীনভাবে_পরিচয়যোগ্য যুক্তিটি সত্য হতে হবে । যদি তা না হয় তবে get_query_var ('post_type') url আর্গুমেন্টে প্রদত্ত পোস্ট_ টাইপ মানটি কখনই ফিরিয়ে আনবে না। কোডেক্স.ওয়ার্ডপ্রেস.আর.
গুস্তাভো

আরেকটি টিপ / প্রস্তাবিত সম্পাদনা: get_query_var('post_type')একটি অ্যারে ফিরিয়েছে (স্ট্রিংয়ের পরিবর্তে) সুতরাং সরাসরি তুলনা করা যায়নি। যেহেতু আমি একবারে কেবল একটি পোস্টের ধরণ অনুসন্ধান করছি, আমি কেবল আমার $post_typeবারটি পরিবর্তিত করেছি $post_type[0]
অনাবশ্যক

সেখান থেকে URL পুনর্লিখন একটি উপায় http://localhost:3000/?s=cloud%27&post_type=productকরতেhttp://localhost:3000/search/cloud/product
YarGnawh

@ ইয়ারগনাউহ দেরিতে সাড়া দেওয়ার জন্য দুঃখিত, এটি ওয়ার্ডপ্রেস দেখুন st স্ট্যাককেেক্সচেঞ্জ / প্রশ্নগুলি / 15418/… । পুনর্লিখনকে খুব ওয়ার্ডপ্রেস.আর
রোনাল্ড

search_templateফিল্টার করার জন্য একটি আরো উপযুক্ত বিকল্প মনে করা হয়template_include
আলেক্সি Kosov

6

এখানে আমার জন্য কাজ করে। পরিষ্কার হিসাবে নয় তবে কাজের এই উত্তরগুলির কোনও উত্তর আমি পাইনি।

কাস্টম পোস্ট প্রকারের জন্য অনুসন্ধান ফর্ম:

<form role="search" method="get" class="search-form" action="<?php echo home_url( '/' ); ?>">
    <label>
        <span class="screen-reader-text"><?php echo _x( 'Search for:', 'label' ) ?></span>
        <input type="search" class="search-field" placeholder="<?php echo esc_attr_x( 'Search …', 'placeholder' ) ?>" value="<?php echo get_search_query() ?>" name="s" title="<?php echo esc_attr_x( 'Search for:', 'label' ) ?>" />
        <input type="hidden" name="post_type" value="book" />
    </label>
    <input type="submit" class="search-submit" value="<?php echo esc_attr_x( 'Search', 'submit button' ) ?>" />
</form>

ফাংশন.এফপি ইন:

function searchfilter($query) {
    if ($query->is_search && !is_admin() ) {
        if(isset($_GET['post_type'])) {
            $type = $_GET['post_type'];
                if($type == 'book') {
                    $query->set('post_type',array('book'));
                }
        }       
    }
return $query;
}
add_filter('pre_get_posts','searchfilter');

অনুসন্ধান.এফপি ইন:

<?php if (have_posts()) : ?>
<?php while (have_posts()) : the_post(); ?>
    <?php if(isset($_GET['post_type'])) {
        $type = $_GET['post_type'];
           if($type == 'book') {?>

               /* Format for "book" custom post type */

           <?php } else { ?>

               /* Format for custom post types that are not "book,"
               or you can use elseif to specify a second post type the
               same way as above. Copy the default format here if you
               only have one custom post type. */

           <?php } ?>
    <?php } else { ?>

              /* Format to display when the post_type parameter
              is not set (i.e. default format) */
<?php } ?>
<?php endwhile; else: ?>

/* What to display if there are no results. */

<?php endif; ?>

স্বাভাবিকভাবেই তিনটি জায়গায় আপনার কাস্টম পোস্টের ধরণের সাথে "বই" প্রতিস্থাপন করতে হবে।

আশা করি এটি কাউকে সাহায্য করবে!


2

একটি সংক্ষিপ্ত কোড আরও বাস্তব

 function template_chooser($template)   
{    
  global $wp_query; 
  $post_type = $wp_query->query_vars["pagename"];   
  if( isset($_GET['s']) && $post_type == 'products' )   
  {

    return locate_template('archive-search.php');  //  redirect to archive-search.php
  }   
  return $template;   
}
add_filter('template_include', 'template_chooser'); 

2

আমি আমার সাধারণ অনুসন্ধান এবং কাস্টম পোস্টের ধরণে আমার অনুসন্ধানগুলির জন্য দুটি আলাদা ফর্ম ব্যবহার করতে চাইছিলাম।

আমার কাস্টম পোস্টের ধরণটি সাধারণ পৃষ্ঠাগুলির চেয়ে আলাদা শিরোনাম ব্যবহার করে, আমার সাধারণ পৃষ্ঠায়, আমার অনুসন্ধান ফর্মটিতে কলটি হ'ল:

<?php get_search_form(true); ?>

এবং কাস্টম পোস্ট ধরণের শিরোনামে আমার অনুসন্ধান ফর্মটিতে কলটি হ'ল:

<?php get_template_part('search','library'); ?>

যার অতিরিক্ত ক্ষেত্র রয়েছে:

<input type="hidden" name="post_type" value="library" /> //Where "library" is my custom post type.

ফাংশন ফাইলে আমার নীচের কোড রয়েছে যা আপনি সরবরাহ করেছেন।

/** Custom Search for Library */
function search_library($template)   
{    
  global $wp_query;   
  $post_type = get_query_var('post_type');   
  if( $wp_query->is_search && $post_type == 'library' )   
  {
    return locate_template('search-library.php');  //  redirect to archive-search.php
  }   
  return $template;   
}
add_filter('template_include', 'search_library');

অনুসন্ধান ফর্মটি কাস্টম ক্ষেত্রগুলির মধ্যে কোনও অনুসন্ধান করছে কিনা তা সনাক্ত করে, এটি কোনও পছন্দসই টেম্পলেটে অনুসন্ধানটি দেখায়, অন্যথায় সাধারণ টেম্পলেটটি ব্যবহার করে।

সম্পাদনা করুন: get_search_form () ফাংশন কলটি ঠিক করেছে যা যাই হোক না কেন সত্যই ফিরে আসত।


1
মূল্যবান, কিন্তু get_search_form('true')হওয়া উচিত get_search_form(true)get_search_formএকটি বুলিয়ান ইনপুট খুঁজছেন, তাই পারেন হয় trueবা false। এটিকে উদ্ধৃতিতে মুড়িয়ে আপনি বুলিয়ান প্যারামিটার নয়, একটি স্ট্রিং খাওয়াচ্ছেন। পথ ফাংশন সেট আপ করা হয়েছে, উভয় যে 'true'এবং 'false'একই ফলাফল ফিরে আসবে, কারণ তারা উভয় খালি নয় এমন স্ট্রিং (যা ফাংশন উভয় ক্ষেত্রেই সত্য ফিরে ঘটায়) আছে।
মাইক

1

খালি ইনপুট অনুসন্ধানের সমস্যার সমাধান করতে আপনি এটির সাথে ফাংশন কোডটি বিকল্পযুক্ত করতে পারেন:

function template_chooser($template)   
{    
 global $wp_query;   
 $post_type = get_query_var('post_type');   
 if( isset($_GET['s']) && $post_type == 'products' )   
 {
  return locate_template('archive-search.php');  //  redirect to archive-search.php
 }   
 return $template;   
}
add_filter('template_include', 'template_chooser');

3
আপনার কোডটি কীভাবে কাজ করে তা ব্যাখ্যা করে যদি দুর্দান্ত হয় তবে কোডের উত্সটি প্রকাশ করে
পিটার গুসেন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.