WordPress搜索:漂亮的URL(固定链接)、定制帖子类型和分页

时间:2012-03-01 作者:turbonerd

我的网站上有三个单独的搜索框:species CPT搜索,glossary CPT搜索和我想搜索的一般搜索postspecies 职位类型。

我的问题有三个,

创建漂亮的搜索URL最有效的代码是什么?WordPress默认情况下不激活这些URL的原因是什么searchform-species, searchform-glossary, searchsearchresults 指定我的物种搜索只返回物种结果,词汇表将返回词汇表结果等。如何合并分页


我当前尝试的代码如下:

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 其中列出了postspecies 包含单词betta的内容/search/betta/species (或任何最适合SEO的)并显示species 包含单词betta的内容与#2相同的用户,然后单击Next 按钮(previous_posts_link). URL更改为/search/betta/species/page/2 用户可以看到接下来列出的25个物种我是WP重写和分页方面的新手,因此非常感谢您的帮助。

1 个回复
最合适的回答,由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

结束

相关推荐

widgetlogic and permalinks

我试图使用widgetlogic在某些页面上有条件地显示菜单。每个菜单都使用如下标记is_page(array(\"Page Name\", \"Page Name 2\" ...)), 在我尝试更改permalinks之前,它一直工作得很好(因此所有菜单都会从各自的页面中消失)。我做错什么了吗?是否有解决方法?