有Geo Data Store by our own man, @Brady. 它在我的一个装置中做得很好。
它使用一个自定义表,只存储ID、meta-ID、lat和lng信息,因此即使在数据库开始扩展时,查询也会保持快速和简短。我这边的评价是五星。
此插件旨在供其他开发人员使用,并与主题和其他插件一起使用。许多主题和插件使用WordPress元数据表来存储帖子的经纬度坐标。虽然这样做很好,但元数据表无法很好地索引。举个例子,您创建了一个名为“properties”的自定义post类型。您创建了100000个贴子,所有贴子都附有纬度和经度坐标。例如,您希望用户在50英里半径内搜索这些属性。由于WordPress存储元数据的方法,查询速度很慢,尤其是在处理大量数据时。
插件描述中的Brady
注意:在删除帖子时,有一个与WP内部相关的bug,行不会删除。不要担心它。我试着和开发人员一起解决这个问题,但我们没有支持它。无论如何:这不会造成任何损害,但在上线(或在本地安装中测试)之前,应该清理表,以尽量减少不相关行的数量。
注释中Scotts pastebin的示例代码
// Only do a map search if user submitted one
if( 2 == $_SESSION[\'s_doing_property_search\'] )
{
// Only generate map search results if we don\'t have any yet or if they are a day out of date
if( empty( $_SESSION[\'homes_for_\' . $type . \'_map_search_results\'] ) || $_SESSION[\'homes_for_\' . $type . \'_map_search_timestamp\'] < strtotime( "-1 Day" ) )
{
// Load instance of GeoDataStore
if ( ! isset( $sc_gds ) )
$sc_gds = new sc_GeoDataStore();
// Just get the ID\'s of posts in range
$_SESSION[\'homes_for_\' . $type . \'_map_search_results\'] = (array) $sc_gds->getPostIDsOfInRange( "homes-for-" . $type, $_SESSION[\'s_property_radius\'], $_SESSION[\'s_property_address_lat\'], $_SESSION[\'s_property_address_lng\'] );
// Set a timestamp so we don\'t do this expensive get each page load.
$_SESSION[\'homes_for_\' . $type . \'_map_search_timestamp\'] = time();
}
// We we have no results then set an array just one that will trigger no posts found.
if( empty( $_SESSION[\'homes_for_\' . $type . \'_map_search_results\'] ) )
$query->set( \'post__in\', array(1) );
else
$query->set( \'post__in\', $_SESSION[\'homes_for_\' . $type . \'_map_search_results\'] );
}