最不幸的是,虽然我最初的解决方案很优雅,但我没有预见到这种复杂性,因此给您带来的不便,我深表歉意。
因此,我提供了另一种解决方案。
Firstly to get your fancy search query:
您的标记需要更改,但这将截获URL并在内部正确重写它们,它与其他答案类似,但更漂亮、更快、更易于阅读,而且只需一个函数
function custom_rewrite( $wp_rewrite ) {
$feed_rules = array(
\'search/(.+)/(.+)\' => \'index.php?post_type=\'.$wp_rewrite->preg_index(1).\'&s=\' . $wp_rewrite->preg_index(2)
);
$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\', \'custom_rewrite\' );
因此
example.com/search/post/bannana
将在所有“post”类型的帖子中搜索bannana。
如果您不希望“搜索”,而是希望显示一个术语,那么只需修改重写规则中的查询变量即可。
您可以使用monkeyman rewrite rules Analyzer插件来帮助您,方法是输入URL并显示哪个重写规则处理它以及所述规则的优先级/顺序
BUT
然而,您将无法使用优雅的html标记来使用这些URL,它将无法很好地发挥作用,您将需要修改表单提交到的位置,这意味着虽然这听起来可能是一个很棒的想法,但在实践中,实现意味着您将需要至少1个重定向,以便搜索框使用这些URL,这一点都不理想。
For your species search problem
还要修改物种登记,使其更加具体/准确:
$args = array(
\'labels\' => $labels,
\'public\' => true,
\'publicly_queryable\' => true,
\'exclude_from_search\' => false, // lets not guess what this will be, lets be authorative
\'show_ui\' => true,
\'show_in_menu\' => true,
\'query_var\' => true,
\'has_archive\' => true,
\'capability_type\' => \'post\',
\'has_archive\' => true,
\'hierarchical\' => false,
\'menu_position\' => 5,
\'menu_icon\' => $this->plugin_url . \'images/fish20.png\',
\'supports\' => array(\'author\',\'thumbnail\',\'excerpt\',\'comments\',\'revisions\')
);
但是,虽然这可能会解决问题,但我怀疑不会。重读你的问题,我看到它重写为/搜索/术语,但WordPress默认情况下不会这样做。我怀疑您在其他地方有代码可以将搜索词重写为更漂亮的版本,用于一般的帖子搜索,但这是一种干扰,无论是因为它在代码中添加的顺序还是其他原因。
由于我看不到您的整个代码库,而且我也不确定这个搜索代码修饰是什么样子的,所以我只能为您指出它的方向(如果没有设置post\\u类型,则会有条件地重写,而不是总是这样)。
edit: give this a try:
function custom_rewrite( $wp_rewrite ) {
$feed_rules = array(
\'species/(.+?)(/[0-9]+)?/?$\' => \'index.php?post_type=species&species=\'.$wp_rewrite->preg_index(1).\'&page=\'.$wp_rewrite->preg_index(2)
);
$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\', \'custom_rewrite\' );