为什么我的自定义帖子类型搜索在更改URL/更新WordPress后停止工作?

时间:2012-06-08 作者:turbonerd

IMPORTANT UPDATE: I\'ve realised that my problems could also lie with the WordPress 3.3 update.

不久前我posted a solution to my own question 关于搜索自定义帖子类型。

当时,我正在使用URLhttp://www.seriouslyfish.com/dev/ 我重新开发了网站。

现在我“上线”了,把一切都搬到了http://www.seriouslyfish.com.

出于某种原因,这似乎破坏了我的自定义帖子类型搜索。如果您尝试从“PROFILESEARCH“或”QUESTIONSEARCH“框,您将看到它正在重定向到/search/ 而不是/questions/search/species/search.

我已经安装了重写分析器,但我认为这不是问题所在,因为此URL似乎工作正常:http://www.seriouslyfish.com/species/search/betta.

你知道这是什么原因吗?我不能百分之百确定问题在于URL的更改,因为没有任何代码需要更改。

<小时>

.htaccess

RewriteEngine On
RewriteCond %{QUERY_STRING} genus=([a-zA-Z0-9-]+)&species=([a-zA-Z0-9-]+)
RewriteRule ^profile.php$ /species/%1-%2? [L,R=301]

RewriteCond %{QUERY_STRING} id=([0-9]*)
RewriteRule ^profile.php$ calc.php?id=%1 [L,R=301]

RewriteRule ^kb.php$ /knowledge-base/ [L,R=301]

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# END WordPress
<小时>wp-config.php (或者,其中有几行-文件中没有其他与URL相关的内容)

define(\'WP_SITEURL\', \'http://www.seriouslyfish.com\');
define(\'WP_HOME\', \'http://www.seriouslyfish.com\');
<小时>

the form actions

档案搜索

<h1 class="profilesearch">PROFILE<span class="white">SEARCH</span></h1>
<form id="profilesearch" action="<?php echo home_url( \'/species/\' ); ?>" method="get">
    <input type="text" size="50" class="default-value" value="SEARCH" name="s" />
    <input type="submit" value="GO" class="profilesearch_submit" />
    <label style="width: 180px;">SEARCH FISH SPECIES PROFILES</label>
</form>
问题搜索

<h1 class="profilesearch">QUESTION<span class="white">SEARCH</span></h1>
<form id="profilesearch" action="<?php echo qa_get_url(\'archive\'); ?>" method="post">
    <input type="hidden" name="type" value="profile" />

    <input type="text" size="50" class="default-value" value="<?php the_search_query(); ?>" name="s" />
    <input type="submit" value="GO" class="profilesearch_submit" />
</form>
词汇搜索

<div class="glossary" href="#">
    GLOSSARY &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong class="dkblue">&#9660;</strong>
    <span>
        <form action="<?php echo home_url( \'/glossary/\' ); ?>" method="get">
            <p style="font-size:12px;">SEARCH<strong class="dkblue">GLOSSARY</strong></p>
            <input type="text" name="s" value="" />
            <input type="submit" value="GO" class="glossary_submit" />
        </form>
        <div class="glossaryletters">
            <a href="/glossary/a/">A</a>
...
            <a href="/glossary/z/">Z</a>
            <div class="clear"></div>
        </div>
    </span>
</div>
<小时>

custom_rewrite function

/* --- rewrite rules for searches...*/
function custom_rewrite( $wp_rewrite ) {
    $species = array(
        \'(species|glossary)/search/(.+?)(/page/([0-9]+))?/?$\'      =>  \'index.php?post_type=\'.$wp_rewrite->preg_index(1).\'&s=\'.$wp_rewrite->preg_index(2).\'&paged=\'.$wp_rewrite->preg_index(4)
    );  

    $wp_rewrite->rules = $species + $wp_rewrite->rules;
}
// refresh/flush permalinks in the dashboard if this is changed in any way
add_filter( \'generate_rewrite_rules\', \'custom_rewrite\' );
提前谢谢你,

4 个回复
SO网友:Gavin Anderegg

有可能在移动网站后,您没有更新WordPress对网站位置的了解。您可能希望尝试将以下内容添加到wp-config.php 文件:

define(\'WP_SITEURL\', \'http://www.seriouslyfish.com\');
define(\'WP_HOME\', \'http://www.seriouslyfish.com\');
这将覆盖数据库中的设置。WordPress使用位置设置来指导重写流量,因此这可能会解决问题。我猜这是因为你说在你移动网站之前一切正常。

也许重新检查一下你的.htaccess 还有文件吗?可能是重定向不正确?

检查action 表单上的URL。这是由插件、WordPress本身生成的,还是由其他东西生成的?如果它在您的控制下,并且可以以某种方式重新编写,那么您可能不需要在问题顶部链接到的答案中使用手动重定向?

很抱歉,如果我在这里抓住了救命稻草,但是如果不插入代码并查看发生了什么,就很难调试它。

SO网友:Ivan Slaughter

您是否尝试将EP\\U PERMALINK作为EP\\U掩码(端点掩码)添加到自定义帖子类型参数中。?此参数可能有用。

\'permalink_epmask\' => EP_PERMALINK
我曾经有过这样的经历,只需重新冲洗permalink即可解决。

祝你好运

SO网友:Diana

检查您的帖子类型创建代码,有时人们会使用旧代码,WordPress会更改一个丢失的代码。无论您使用什么进行搜索,您的帖子类型都应允许以下内容:

\'exclude_from_search\'=> false
\'publicly_queryable\'=> true
\'has_archive\'=> true 
关于搜索,我发现这种方法很有趣:http://dbaines.com/blog/archive/wordpress-custom-post-type-multiple-search/

SO网友:Mdunbavan

您是否尝试过通过重新保存永久链接来刷新永久链接,我遇到了这个问题,它对我有效。

您是否也考虑过定义搜索,因此要了解您正在搜索的内容,请尝试添加此函数;

function mySearchFilter($query) {
    $post_type = $_GET[\'type\'];
    if (!$post_type) {
        $post_type = \'any\';
    }
    if ($query->is_search) {
        $query->set(\'post_type\', $post_type);
    };
    return $query;
};

add_filter(\'pre_get_posts\',\'mySearchFilter\');

结束

相关推荐

Get_Search_Form()似乎没有考虑参数

我正在手动创建菜单,并尝试包含搜索表单。这摘自Wordpress文档“构建简单菜单列表”,网址为http://codex.wordpress.org/Function_Reference/wp_get_nav_menu_items.我添加了一个额外的<;li>;元素,并添加了搜索表单。 // Get the nav menu based on $menu_name (same as \'theme_location\' or \'menu\' arg to wp_nav_me