这是already asked by User Brad,但他似乎已经失去了兴趣。我知道有插件(例如Curated Search),但我有太多的页面,有太多的锚点使用其中一个。
我们说我有一个WP-Page,其中有两页 www.homepage.com/cats 和 www.homepage.com/dogs 。 www.homepage.com/cats 还有两个主页 www.homepage.com/cats#mice 和 www.homepage.com/cats#birds 。
如果有人搜索" Cats"我想重新定位。到 www.homepage.com/cats ,如果有人搜索" Cats#mice"到 www.homepage.com/cats#mice 等等。
我已经用了很长一段时间来摆弄这个问题了,但我是一个php-noob,因此我并不感到意外,因为它不起作用。这是我到目前为止所得到的;也许它完全是愚蠢的,也许我只缺少一行代码。
<?php
add_action ('template_redirect', 'one_match_redirect');
function one_match_redirect() {
if (is_search()) {
$query = get_search_query();
$url = get_home_url( $blog_id = null, $path = $query, $scheme = null );
if (is_array(@get_headers($url))) {
wp_redirect ( $url, 303 );
}
else {
new WP_Query ('s=$query');
}
}
}
?>
重定向确实有效,但在搜索时,例如对于&#34; lalala&#34;,我只能重新连接到 www.homepage.com/lalala 而不是 www.homepage.com/s=lalala 。 我究竟做错了什么? 任何帮助将不胜感激。
答案 0 :(得分:1)
摆弄更多;现在它有效。警告:我仍然是一个php-noob,因此以下可能是不优雅的代码。但至少在我的页面上确实有效:
<?php
add_action ('template_redirect', 'one_match_redirect');
function one_match_redirect() {
global $wpdb;
if (is_search()) {
$query = get_search_query();
$query2 = strstr($query, "#", true);
$url = get_home_url( $blog_id = null, $path = $query, $scheme = null );
$pos = strpos($query, '#');
if ($pos === false) {
$page = get_page_by_path($query);
if ($page) {
wp_redirect ( $url, 303 );
}
}
else {
$page = get_page_by_path($query2);
if ($page) {
wp_redirect ( $url, 303);
}
}
}
}
?>
如果我没有/关心我的锚点,以下就足够了:
<?php
add_action ('template_redirect', 'one_match_redirect');
function one_match_redirect() {
global $wpdb;
if (is_search()) {
$query = get_search_query();
$url = get_home_url( $blog_id = null, $path = $query, $scheme = null );
$page = get_page_by_path($query);
if ($page) {
wp_redirect ( $url, 303 );
}
}
}
?>