提交搜索表单后的自定义结果页面
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;
}
使用不同形式的多个搜索结果页面
如果您想在表单中设置一个值,并使用它来访问特定的结果页面:
打开您主题的 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
中的此文件中加载这些模板。所以你会得到多个使用不同形式的搜索结果页面。
我正在 运行 兜圈子,我正在尝试 运行 来自自定义搜索表单的查询并将结果显示在特定的自定义页面上。
我创建了一个名为 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;
}
使用不同形式的多个搜索结果页面
如果您想在表单中设置一个值,并使用它来访问特定的结果页面:
打开您主题的 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
中的此文件中加载这些模板。所以你会得到多个使用不同形式的搜索结果页面。