我的网站上有三个单独的搜索框:species
CPT搜索,glossary
CPT搜索和我想搜索的一般搜索post
和species
职位类型。
我的问题有三个,
创建漂亮的搜索URL最有效的代码是什么?WordPress默认情况下不激活这些URL的原因是什么记住,我需要在中使用什么代码searchform-species
, searchform-glossary
, search
和searchresults
指定我的物种搜索只返回物种结果,词汇表将返回词汇表结果等。如何合并分页
我当前尝试的代码如下:
CODE FOR #1
add_action( \'template_redirect\', \'my_rewrite\' );
function my_rewrite() {
if ( is_search() and false === strpos( $_SERVER[\'REQUEST_URI\'], \'/search/\' ) ) {
wp_redirect( get_bloginfo( \'home\' ) . \'/search/\' . str_replace( \' \', \'+\', str_replace( \'%20\', \'+\', get_query_var( \'s\' ) ) ) );
exit();
}
}
CODE FOR #2 & #3
搜索表单。php<?php
$search_query = get_search_query();
if (!$search_query) {
$search_query = "SEARCH";
}
?>
<form id="topbar_search" action="<?php echo home_url( \'/\' ); ?>" method="post">
<p>SEARCH</p>
<input type="text" size="50" value="<?php echo $search_query; ?>" name="s" id="s" class="topbar_longinput default-value" />
<input type="submit" value="GO" class="topbar_submit" />
<p class="tinylinks"><a href="#1">advanced search</a></p>
</form>
搜索物种。php
<h1 class="profilesearch">PROFILE<span class="white">SEARCH</span></h1>
<form id="profilesearch" action="<?php echo home_url( \'/\' ); ?>" method="post">
<input type="hidden" name="type" value="profile" />
<input type="text" size="50" class="default-value" value="SEARCH" name="s" />
<input type="submit" value="GO" class="profilesearch_submit" />
<!-- <p class="tinysearch"><a href="/dev/advanced-search/">ADVANCED SEARCH</a></p> -->
<input type="checkbox" name="showthumbnails" id="showthumbnails" class="checkbox" <?php if ($_POST["showthumbnails"] == "on") { echo \'checked="checked" \'; } ?>/><label for="showthumbnails">HIDE THUMBNAILS</label>
</form>
搜索。php
if (isset($_REQUEST["type"])) {
switch ($_REQUEST["type"]) {
case "profile" :
$post_type = "species";
break;
case "glossary" :
$post_type = "glossary";
break;
default :
$post_type = array( \'post\', \'species\' );
break;
}
} else {
$post_type = array( \'post\', \'species\' );
}
$paged = (get_query_var(\'paged\')) ? get_query_var(\'paged\') : 1;
$args = array(
\'s\' => $search_term,
\'post_type\' => $post_type,
\'paged\' => $paged
);
?>
<?php get_template_part(\'searchresults\'); ?>
<小时>
What\'s currently happening is this:
单个搜索有效,但分页无效。当我单击
next/previous_posts_link
按钮,它添加
/page/2/
指向URL,但不执行任何操作。如果我试着回应
get_query_var(\'page\')
它返回
NULL
. 如果我试着回应
\'paged\'
相反,它会返回
0
.
此外,当用户单击此链接时$search_query
来自searchform的变量。php显示为page/bettas
(其中bettas
是原始查询)。
<小时>
Ideally what I\'d like to happen is this:
<在“常规搜索”中,用户输入betta。URL更改为
/search/betta
其中列出了
post
或
species
包含单词betta的内容/search/betta/species (或任何最适合SEO的)并显示
species
包含单词betta的内容与#2相同的用户,然后单击
Next 按钮(
previous_posts_link
). URL更改为
/search/betta/species/page/2
用户可以看到接下来列出的25个物种我是WP重写和分页方面的新手,因此非常感谢您的帮助。
最合适的回答,由SO网友:Tom J Nowell 整理而成
分页可以完全按照搜索存档模板中其他地方的工作方式进行。
在搜索中不需要自定义查询和类型变量。php。要搜索特定的自定义帖子,您可以修改查询,也可以转到该帖子存档并附加搜索查询,例如:。
实例com/event\\u post\\u type/?s=期限
任何类别或分类归档都是如此,只需添加?s=末尾的searchterm将把它转换为搜索查询,就像在URL的末尾添加/feed/将为您提供特定页面/归档内容的RSS2提要一样。
你的任务是美化它,包括添加额外的重写规则,将其转换为更好的内容,例如:
function search_rewrite( $wp_rewrite ) {
$feed_rules = array(
\'search/(.+)/events\' => \'index.php?post_type=events&s=\'. $wp_rewrite->preg_index(1)
);
$wp_rewrite->rules = $feed_rules + $wp_rewrite->rules;
}
// refresh/flush permalinks in the dashboard if this is changed in any way
add_filter( \'generate_rewrite_rules\', \'search_rewrite\' );
可以让你做个例子。com/search/searchterm/events,尽管我建议使用/events/search/searchterm作为更好的方法。
使用monkeyman重写规则分析器插件测试您的更改,您可以在以下答案中找到有关重写规则的更多详细信息:Pretty URL with add_query_var