提交搜索表单后的自定义结果页面

Custom result page upon submitting search form

我正在 运行 兜圈子,我正在尝试 运行 来自自定义搜索表单的查询并将结果显示在特定的自定义页面上。

我创建了一个名为 search-custom.php 的自定义搜索页面,并且我已经注册了它。 现在我不明白为什么当我提交搜索表单时出现 404 错误。

这是我目前的搜索表单,提交表单后,url 路径似乎是正确的,我是不是遗漏了什么?

<form action="<?php echo esc_url( home_url().'/search-custom' ); ?>" method="get">
<input type="hidden" name="s" value="<?php the_search_query(); ?>">
<input type="hidden" value="qcm" name="post_type">
<button type="submit"><span class="mr-2">Go</button>
</form>

我不想从 function.php 文件重定向它我需要这种当前格式。预先感谢您的灯光。

您无需将表单的 action 更改为模板文件的名称。在您的搜索中-custom.php 有:

<form action="<?php echo esc_url( home_url( '/' ) ); ?>" method="get">
    <input type="hidden" name="s" value="<?php the_search_query(); ?>">
    <input type="hidden" value="qcm" name="post_type">
    <button type="submit"><span class="mr-2">Go</button>
</form>

设置此模板文件后,您可以在您的页面模板(您希望表单显示的页面,或者侧边栏或其他内容)中使用它:

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

将使用默认的 wordpress 搜索模板输出结果。

如果您想为结果使用不同的模板文件,您可以将其放入主题的 functions.php 文件中并更改结果页面(即 search-results-custom.php) :

add_action('template_include', 'search_custom_template');

function search_custom_template( $template ) {
  if ( isset( $_REQUEST['search'] ) && is_search() ) {
     $temp = locate_template('search-results-custom.php');
     if ( ! empty($temp) ) {
         $template = $temp;
     }
  }
  return $template;
}

使用不同形式的多个搜索结果页面

如果您想在表单中设置一个值,并使用它来访问特定的结果页面:

  1. 打开您主题的 search.php 文件,为安全起见复制一份并将文件的全部内容替换为以下代码:

     <?php
     if(isset($_GET['post_type'])) {
         $type = $_GET['post_type'];
         if($type == 'qcm') {
             load_template(TEMPLATEPATH . '/search-custom.php');
         } elseif($type == 'another') {
             load_template(TEMPLATEPATH . '/search-another.php');
         }
     }
     ?>
    

在此代码中,我们检查为名称为 post_type 的字段设置的值。在您的问题中,您设置了 qcm 的值。当该字段在提交时具有此值时,您将加载 search-custom.php。如果您有其他形式的其他值,您可以只添加一个 elseif 并加载另一个搜索结果模板。

如果你想使用另一个隐藏的输入来检查值,你可以简单地创建一个:

<input type="hidden" name="my-hidden-info" value="value-to-check" />

如您所见,通过这种方式,您可以在表单内编辑一个值,并针对特定值获取不同的搜索结果页面。表单的操作没有改变,您将始终使用 search.php 文件。您只需添加其他模板,您正在 if and elseif 中的此文件中加载这些模板。所以你会得到多个使用不同形式的搜索结果页面。