Wordpress中如何根据坐标显示用户?
Posted
技术标签:
【中文标题】Wordpress中如何根据坐标显示用户?【英文标题】:How to display users according to coordinates in Wordpress? 【发布时间】:2015-12-10 20:11:11 【问题描述】:在这里,我有一个艰难的: 我有一个运行两个插件的 wordpress: - 伙伴出版社 - Wordpress 精确地理定位(将用户的经度、纬度、高度、位置时间和 id 存储在数据库中)。
现在,在我的会员目录页面上,我正在显示网站的用户。但是,我想向正在查看该页面的用户展示该网站的用户。
每次我们访问此页面时,为了您的信息,查看器的位置也会被加载并存储在数据库中。
插件商店: - wp_usermeta 中的最后一个位置 - 在 wp_options 中访问的所有位置 - cookie 中的当前位置
这是测试人员数据库中随机位置的值:
a:13:s:8:"latitude";s:10:"40.6576022";s:9:"longitude";s:18:"-73.58318349999999";s:8:"altitude";s:1:"0";s:8:"accuracy";s:4:"2859";s:16:"altitudeAccuracy";s:1:"0";s:7:"heading";s:3:"NaN";s:5:"speed";s:3:"NaN";s:10:"error_code";s:0:"";s:13:"error_message";s:0:"";s:8:"php_time";i:1449777359;s:8:"php_date";s:19:"2015-12-10 19:55:59";s:15:"php_date_format";s:11:"Y-m-d H:i:s";s:7:"user_id";i:4;
我希望能够在用户访问页面时显示查看页面的用户周围的用户。所以基本上: 显示位置在距离查看者 ID 位置 100 米(半径)处的 ID。
但是,我不知道如何去获取数据库中的任何内容。
这是显示成员的页面的代码,通常:
<?php
/**
* BuddyPress - Members Loop
*
* Querystring is set via AJAX in _inc/ajax.php - bp_legacy_theme_object_filter()
*
* @package Boss
* @subpackage bp-legacy
*/
?>
<?php do_action( 'bp_before_members_loop' ); ?>
<?php if ( bp_has_members( bp_ajax_querystring( 'members' ) ) ) : ?>
<div id="pag-top" class="pagination">
<div class="pag-count" id="member-dir-count-top">
<?php bp_members_pagination_count(); ?>
</div>
<div class="pagination-links" id="member-dir-pag-top">
<?php bp_members_pagination_links(); ?>
</div>
</div>
<?php do_action( 'bp_before_directory_members_list' ); ?>
<ul id="members-list" class="item-list" role="main">
<?php while ( bp_members() ) : bp_the_member(); ?>
<li>
<div class="item-avatar">
<a href="<?php bp_member_permalink(); ?>"><?php bp_member_avatar('type=full&width=70&height=70'); ?></a>
</div>
<div class="item">
<div class="item-title">
<a href="<?php bp_member_permalink(); ?>"><?php bp_member_name(); ?></a>
</div>
<?php
$showing = null;
//if bp-followers activated then show it.
if(function_exists("bp_follow_add_follow_button"))
$showing = "follows";
$followers = bp_follow_total_follow_counts(array("user_id"=>bp_displayed_user_id()));
elseif (function_exists("bp_add_friend_button"))
$showing = "friends";
?>
<div class="item-meta">
<div class="activity">
<?php bp_member_last_active(); ?>
</div>
<?php if($showing == "friends"): ?>
<span class="count"><?php echo friends_get_total_friend_count(bp_get_member_user_id()); ?></span>
<?php if ( friends_get_total_friend_count(bp_get_member_user_id()) > 1 ) ?>
<span><?php _e("Friends","boss"); ?></span>
<?php else ?>
<span><?php _e("Friend","boss"); ?></span>
<?php ?>
<?php endif; ?>
<?php if($showing == "follows"): ?>
<span class="count"><?php $followers = bp_follow_total_follow_counts(array("user_id"=>bp_get_member_user_id())); echo $followers["followers"]; ?></span><span><?php _e("Followers","boss"); ?></span>
<?php endif; ?>
</div>
<div class="item-desc">
<p>
<?php if ( bp_get_member_latest_update() ) : ?>
<?php bp_member_latest_update( array( 'view_link' => true ) ); ?>
<?php endif; ?>
</p>
</div>
<?php do_action( 'bp_directory_members_item' ); ?>
<?php
/***
* If you want to show specific profile fields here you can,
* but it'll add an extra query for each member in the loop
* (only one regardless of the number of fields you show):
*
* bp_member_profile_data( 'field=the field name' );
*/
?>
</div>
<div class="action">
<div class="action-wrap">
<?php do_action( 'bp_directory_members_actions' ); ?>
</div>
</div>
<div class="clear"></div>
</li>
<?php endwhile; ?>
</ul>
<?php do_action( 'bp_after_directory_members_list' ); ?>
<?php bp_member_hidden_fields(); ?>
<div id="pag-bottom" class="pagination">
<div class="pag-count" id="member-dir-count-bottom">
<?php bp_members_pagination_count(); ?>
</div>
<div class="pagination-links" id="member-dir-pag-bottom">
<?php bp_members_pagination_links(); ?>
</div>
</div>
<?php else: ?>
<div id="message" class="info">
<p><?php _e( "Sorry, no members were found.", 'boss' ); ?></p>
</div>
<?php endif; ?>
<?php do_action( 'bp_after_members_loop' ); ?>
感谢您的帮助!
最好的问候
【问题讨论】:
【参考方案1】:您需要使用this answer获取他们的坐标并与每个用户进行比较
将<?php while ( bp_members() ) : bp_the_member(); ?>
替换为:
<?php
$current_user = wp_get_current_user();
$user_location = get_user_meta($current_user->ID, 'agl_data', true);
$user_lat = floatval($user_location['latitude']); //right now it's a string, you need a float/double.
$user_lng = floatval($user_location['longitude']); //right now it's a string, you need a float/double.
while ( bp_members() ) : bp_the_member();
$bp_location = get_user_meta(bp_get_member_user_id(), 'agl_data', true);
$bp_member_lat = floatval($bp_location['latitude']);
$bp_member_lng = floatval($bp_location['longitude']);
$distance_in_meters = vincentyGreatCircleDistance($user_lat , $user_lng , $bp_member_lat, $bp_member_lng);
if($distance_in_meters < 100)
?>
然后将您的<?php endwhile; ?>
替换为:
<?php ?>
<?php endwhile; ?>
【讨论】:
您好,感谢您的快速答复!我应该在会员页面中复制/粘贴吗? 我刚刚更新了它。您需要将获取用户元键修改为数据库中的内容。然后复制它。显然还添加了我错过的所有 html。 所以你想要 if 语句开始的地方,把它放在你之前<li>
标签
非常感谢,你能告诉我你是如何将它集成到我作为代码发布的页面中的吗?我不知道在 "location_metakey_goes_here" 中放什么?我举了一个例子说明它在数据库中的样子,但也许我不明白!非常感谢您的宝贵时间
再次感谢您的快速回答和出色的解释!我更新了我的文件,到目前为止没有 PHP 错误或其他。但是它没有显示列表中的任何人。我正在测试两个明显出现在同一地址(我的房子)的帐户,也许是因为它不知道哪个表会获取元密钥的信息?你怎么看 ?谢谢!以上是关于Wordpress中如何根据坐标显示用户?的主要内容,如果未能解决你的问题,请参考以下文章
使用 PHP 在 wordpress 中根据登录用户 = 角色显示内容