在这里,我有一个艰难的: 我有一个运行两个插件的wordpress: - Buddypress - Wordpress精确地理定位(存储数据库中用户的经度,纬度,海拔,位置和ID)。
现在,在我的会员目录页面上,我正在显示该网站的用户。但是,我想向网站的用户展示围绕该页面的用户。
每次我们访问此页面时,为了您的信息,查看器的位置也会被加载并存储在数据库中。
插件存储: - wp_usermeta中的最后位置 - 在wp_options中访问过的所有位置 - 饼干中的当前位置
以下是测试人员数据库中随机位置的值:
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;}
我希望能够在用户访问页面时显示用户周围的用户。所以基本上: 将位置为100米(半径)的ID显示在ID查看器的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' ); ?>
感谢您的帮助!
祝你好运
答案 0 :(得分: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; ?>