如果搜索query = slug,则重定向到页面

时间:2016-05-18 08:20:45

标签: php wordpress

这是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 。 我究竟做错了什么? 任何帮助将不胜感激。

1 个答案:

答案 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 );
    }
  }
}
?>