it-swarm.asia

كيفية إنشاء بحث مخصص لنوع المنشور المخصص؟

لدي حقل بحث عن منشورات المدونة ، لكنني بحاجة إلى حقل آخر لنوع منشور مخصص. كيف يمكنني إنشاء هذا نموذج بحث مخصص مع مختلف تخطيط نتائج البحث ؟

42
robert

إليك ما جربته وحصلت على حل به 3 خطوات. لنفترض أن نوع المنشور المخصص الخاص بك هو " منتجات "

1. إضافة رمز الوظيفة هنا يمكنك تحديد archive-search.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');    

2. إنشاء قالب نتائج البحث لنوع المنشور المخصص (archive-search.php)

        <?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/

58
Ronald

هنا هو ما يصلح لي. ليست نظيفة ولكن لم أستطع الحصول على أي من هذه الإجابات الأخرى للعمل.

نموذج البحث عن نوع المنشور المخصص:

<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>

في وظائف. php:

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');

في search.php:

<?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; ?>

من الطبيعي أن تحتاج في كل الأماكن الثلاثة إلى استبدال "كتاب" بنوع النشر المخصص.

أمل أن هذا يساعد شخصاما!

6
Shoelaced

رمز قصير أكثر واقعية

 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
Raylin Aquino Fernández

كنت أتطلع إلى استخدام نموذجين مختلفين لعمليات البحث العادية وعمليات البحث التي أجريتها على نوع منشور مخصص.

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

<?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 () الذي كان سيعود صحيحًا مهما كان الأمر.

2
Fliberty

لإصلاح مشكلة بحث الإدخال الفارغة ، يمكنك استبدال رمز الوظيفة بهذا:

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');
1
ciccioformaggio