php - 如何将网站更改为wordpress中的特定位置
问题描述
例如,
我有一个 domain.com。如果用户搜索 domain.com/toronto。我需要完整的网站应该显示与该城市相关的帖子和文章。
所以我打算做
从搜索查询中取城市(多伦多)
1.使用geolocation api搜索它是否是有效的地方,2.获取lat long,3.在cookie中修复它,直到完成另一个搜索以更新。
我用pre_get_posts
和parse_query
得到城市。但我什么也没得到,请有人建议使用哪些钩子,并且需要快速了解 wordpress 钩子和过滤器。
解决方案
最后我发现,在显示404页面之前有一个钩子,
因此,用于$wp_query->query['name']
获取搜索查询文本,即 london 或 toronto。
然后使用我用谷歌地图 API 检查有效地点。一旦它有效,我就会重定向到具有该位置的搜索 url。我在带有地理位置的主题正常搜索中找到了它。请在您的主题functions.php 中使用以下代码。
在某些地方我使用了我的主题功能
- fw_get_db_settings_option
- 在 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;
}
}
推荐阅读
- windows - 缓慢取消映射网络驱动器号
- swift - 如何安全地重命名我们的文件以及对它的所有引用 - Xcode 10?
- python - Python for 循环没有通过第一次迭代传递变量
- flutter - Flutter Ble 广告
- sql - 如何删除窗口函数使用中的重复值?
- haskell - 如何在 Haskell 中修复“无法将预期的 IO a0 类型与 int 匹配”?
- amazon-web-services - Lambda 调用权限与 API Gateway 权限冲突
- python - 如何获得解压大型 bz2 文件所需的时间?
- zsh - 为用户输入命令
- c# - VS2017创建的iOS和Android项目中是否使用了C#?