首页 > 解决方案 > 如何将网站更改为wordpress中的特定位置

问题描述

例如,

我有一个 domain.com。如果用户搜索 domain.com/toronto。我需要完整的网站应该显示与该城市相关的帖子和​​文章。

所以我打算做

从搜索查询中取城市(多伦多)

1.使用geolocation api搜索它是否是有效的地方,2.获取lat long,3.在cookie中修复它,直到完成另一个搜索以更新。

我用pre_get_postsparse_query得到城市。但我什么也没得到,请有人建议使用哪些钩子,并且需要快速了解 wordpress 钩子和过滤器。

标签: phpwordpresssearchfilterhook

解决方案


最后我发现,在显示404页面之前有一个钩子,

因此,用于$wp_query->query['name']获取搜索查询文本,即 london 或 toronto。

然后使用我用谷歌地图 API 检查有效地点。一旦它有效,我就会重定向到具有该位置的搜索 url。我在带有地理位置的主题正常搜索中找到了它。请在您的主题functions.php 中使用以下代码。

在某些地方我使用了我的主题功能

  1. fw_get_db_settings_option
  2. 在 myredirect_url 中使用您的主题正常搜索 url 和地理位置
add_filter('template_redirect', 'my_404_override' );
function my_404_override() {
    global $wp_query;
    $mysearch_location = $wp_query->query['name'];

    $google_key = '';

    if (function_exists('fw_get_db_settings_option')) {
        $google_key = trim(fw_get_db_settings_option('google_key'));
    }

    $protocol = is_ssl() ? 'https' : 'http';

    $place_detail = file_get_contents($protocol .'://maps.googleapis.com/maps/api/place/textsearch/json?query='.$mysearch_location.'&key='.$google_key);

    $place_detail = json_decode($place_detail);

    $formatted_address = $place_detail->results[0]->formatted_address;
    $latitude = $place_detail->results[0]->geometry->location->lat;
    $longitude = $place_detail->results[0]->geometry->location->lng;

    if($place_detail->status=='OK'){
        status_header( 200 );
        $wp_query->is_404=false;
        $myredirect_url = get_site_url() .'/find/?keyword=&geo='.$formatted_address.'&geo_distance=11&lat='.$latitude.'&long='.$longitude.'&location='.$formatted_address.'&category=';
        wp_redirect( $myredirect_url );
        exit;
    }
}

推荐阅读