* @license GPL-2.0+
* @link http://wp3.in
* @copyright 2014 Rahul Aryan
*/
$user_pages = array();
class AnsPress_User {
/**
* Instance of this class.
*/
protected static $instance = null;
/**
* Return an instance of this class.
* @return object A single instance of this class.
*/
public static function get_instance()
{
// If the single instance hasn't been set, set it now.
if (null == self::$instance) {
self::$instance = new self;
}
return self::$instance;
}
/**
* Initialize the plugin by setting localization and loading public scripts
* and styles.
*/
private function __construct() {
add_filter( 'pre_user_query', array($this, 'follower_query') );
add_filter( 'pre_user_query', array($this, 'following_query') );
add_action('wp_ajax_ap_cover_upload', array($this, 'cover_upload'));
add_action('wp_ajax_ap_avatar_upload', array($this, 'avatar_upload'));
add_action( 'after_setup_theme', array($this, 'cover_size') );
add_action( 'ap_edit_profile_fields', array($this, 'user_fields'), 10, 2 );
add_action( 'wp_ajax_ap_save_profile', array($this, 'ap_save_profile'));
add_action( 'pre_user_query', array($this, 'sort_pre_user_query') );
//add_filter('avatar_defaults', array($this, 'default_avatar'), 10);
add_filter( 'get_avatar', array($this, 'get_avatar'), 10, 5);
//add_filter( 'default_avatar_select', array($this, 'default_avatar_select'));
ap_register_user_page('profile', __('Profile', 'ap'), array('AnsPress_User_Page_Profile', 'output'));
ap_register_user_page('questions', __('Questions', 'ap'), array('AnsPress_User_Page_Questions', 'output'));
ap_register_user_page('answers', __('Answers', 'ap'), array('AnsPress_User_Page_Answers', 'output'));
//ap_register_user_page('favorites', __('Favorites', 'ap'), array('AnsPress_User_Page_Favorites', 'output'));
add_filter('ap_user_menu', array($this, 'ap_user_menu_icons') );
}
/* For modifying WP_User_Query, if passed with a var ap_followers_query */
public function follower_query ($query) {
if(isset($query->query_vars['ap_followers_query'])){
global $wpdb;
$query->query_from = $query->query_from." LEFT JOIN ".$wpdb->prefix."ap_meta M ON $wpdb->users.ID = M.apmeta_userid";
$userid = $query->query_vars['userid'];
$query->query_where = $query->query_where." AND M.apmeta_type = 'follow' AND M.apmeta_actionid = $userid";
}
return $query;
}
public function following_query ($query) {
if(isset($query->query_vars['ap_following_query'])){
global $wpdb;
$query->query_from = $query->query_from." LEFT JOIN ".$wpdb->prefix."ap_meta M ON $wpdb->users.ID = M.apmeta_actionid";
$userid = $query->query_vars['userid'];
$query->query_where = $query->query_where." AND M.apmeta_type = 'follow' AND M.apmeta_userid = $userid";
}
return $query;
}
public function upload_file(){
require_once(ABSPATH . "wp-admin" . '/includes/image.php');
require_once(ABSPATH . "wp-admin" . '/includes/file.php');
require_once(ABSPATH . "wp-admin" . '/includes/media.php');
if ($_FILES) {
foreach ($_FILES as $file => $array) {
if ($_FILES[$file]['error'] !== UPLOAD_ERR_OK) {
echo "upload error : " . $_FILES[$file]['error'];
die();
}
return media_handle_upload( $file, 0 );
}
}
}
public function cover_upload(){
if(ap_user_can_upload_cover() && wp_verify_nonce( $_POST['nonce'], 'upload' )){
$attach_id = $this->upload_file();
$userid = get_current_user_id();
$previous_cover = get_user_meta($userid, '_ap_cover', true);
wp_delete_attachment( $previous_cover, true );
update_user_meta($userid, '_ap_cover', $attach_id);
$result = array('status' => true, 'message' => __('Cover uploaded successfully.', 'ap'), 'view' => '[data-view="cover"]', 'background-image' => 'background-image:url('.ap_get_user_cover($userid).')');
do_action('ap_after_cover_upload', $userid, $attach_id);
}else{
$result = array('status' => false, 'message' => __('Unable to upload cover.', 'ap'));
}
die(json_encode($result));
}
public function avatar_upload(){
if(ap_user_can_upload_cover() && wp_verify_nonce( $_POST['nonce'], 'upload' )){
$attach_id = $this->upload_file();
$userid = get_current_user_id();
$previous_avatar = get_user_meta($userid, '_ap_avatar', true);
wp_delete_attachment( $previous_avatar, true );
update_user_meta($userid, '_ap_avatar', $attach_id);
$result = array('status' => true, 'message' => __('Avatar uploaded successfully.', 'ap'), 'view' => '[data-view="avatar-main"]', 'image' => get_avatar( $userid, 105 ));
do_action('ap_after_avatar_upload', $userid, $attach_id);
}else{
$result = array('status' => false, 'message' => __('Unable to upload cover.', 'ap'));
}
die(json_encode($result));
}
public function cover_size(){
add_image_size( 'ap_cover', ap_opt('cover_width'), ap_opt('cover_height'), array( 'top', 'center' ), true );
add_image_size( 'ap_cover_small', ap_opt('cover_width_small'), ap_opt('cover_height'), array( 'top', 'center' ), true );
}
public function user_fields($user, $meta){
?>
'validation_falied',
'message' => __('Failed to update, please check form.', 'ap'),
'error' => $validation,
);
die(json_encode($result));
}
$fields = ap_profile_fields_to_process();
if (isset($fields['password']))
wp_update_user( array( 'ID' => $current_user->ID, 'user_pass' => esc_attr( $_POST['password'] ) ) );
if (isset($fields['first_name']))
update_user_meta( $current_user->ID, 'first_name', $fields['first_name']);
if ( isset($fields['last_name']) )
update_user_meta($current_user->ID, 'last_name', $fields['last_name']);
if ( isset($fields['nick_name']) )
update_user_meta($current_user->ID, 'nickname', $fields['nick_name']);
if ( isset($fields['display_name']) )
wp_update_user(array('ID' => $current_user->ID, 'display_name' => $fields['display_name']));
if(isset($fields['url']))
update_user_meta( $current_user->ID, 'user_url', $fields['url'] );
if(isset($fields['facebook']))
update_user_meta( $current_user->ID, 'facebook', $fields['facebook'] );
if(isset($fields['twitter']))
update_user_meta( $current_user->ID, 'twitter', $fields['twitter'] );
if(isset($fields['description']))
update_user_meta( $current_user->ID, 'description', $fields['description'] );
if(isset($fields['google']))
update_user_meta( $current_user->ID, 'google', $fields['google'] );
do_action('ap_save_profile', $current_user, $fields);
$result = array(
'status' => true,
'message' => __('Successfully updated your profile.', 'ap'),
);
}else{
$result = array(
'status' => false,
'message' => __('Failed to save profile.', 'ap'),
);
}
die(json_encode($result));
}
public function sort_pre_user_query($query){
if(isset($query->query_vars['ap_query']) && $query->query_vars['ap_query'] == 'sort_points'){
global $wpdb;
$query->query_orderby = 'ORDER BY CAST('.$wpdb->usermeta.'.meta_value as DECIMAL) DESC';
}
}
public function get_avatar($avatar, $id_or_email, $size, $default, $alt){
if ( !empty($id_or_email) ) {
if(is_object($id_or_email)){
$allowed_comment_types = apply_filters( 'get_avatar_comment_types', array( 'comment' ) );
if ( ! empty( $id_or_email->comment_type ) && ! in_array( $id_or_email->comment_type, (array) $allowed_comment_types ) )
return false;
if ( ! empty( $id_or_email->user_id ) ) {
$id = (int) $id_or_email->user_id;
$user = get_userdata($id);
if ( $user )
$id_or_email = $user->ID;
}
}elseif(is_email($id_or_email)){
$u = get_user_by('email', $id_or_email);
$id_or_email = $u->ID;
}
$resized = ap_get_resized_avatar($id_or_email, $size);
if($resized)
return "
";
return $avatar;
}
}
/**
* Set icon class for user menus
* @param arrat $menus
* @return array
* @since 2.0.1
*/
public function ap_user_menu_icons($menus)
{
if (isset($menus['profile']))
$menus['profile']['class'] = ap_icon('home');
if (isset($menus['questions']))
$menus['questions']['class'] = ap_icon('question');
if (isset($menus['answers']))
$menus['answers']['class'] = ap_icon('answer');
return $menus;
}
}
/**
* Register user page
* @param string $page_slug slug for links
* @param string $page_title Page title
* @param callable $func Hook to run when shortcode is found.
* @return void
* @since 2.0.1
*/
function ap_register_user_page($page_slug, $page_title, $func){
global $user_pages;
if(empty($user_pages) || !is_array($user_pages))
$user_pages = array();
$user_pages[$page_slug] = array('title' => $page_title, 'func' => $func);
}
/**
* Count user posts by post type
* @param int $userid
* @param string $post_type
* @return int
* @since unknown
*/
function ap_count_user_posts_by_type( $userid, $post_type = 'question' ) {
global $wpdb;
$where = get_posts_by_author_sql( $post_type, true, $userid );
$query = "SELECT COUNT(*) FROM $wpdb->posts $where";
$key = md5($query);
$cache = wp_cache_get($key, 'count');
if($cache === false){
$count = $wpdb->get_var( $query);
wp_cache_set($key, $count, 'count');
}else
$count = $cache;
return apply_filters( 'ap_count_user_posts_by_type', $count, $userid );
}
/**
* retrive user question counts
* @param int $userid
* @return int
* @since unknown
*/
function ap_user_question_count($userid){
return ap_count_user_posts_by_type( $userid, $post_type = 'question' );
}
/**
* get user answer counts
* @param int $userid
* @return int
* @since unknown
*/
function ap_user_answer_count($userid){
return ap_count_user_posts_by_type( $userid, $post_type = 'answer' );
}
function ap_user_best_answer_count($user_id){
global $wpdb;
$query = $wpdb->prepare("SELECT count(DISTINCT pm.post_id) FROM $wpdb->postmeta pm JOIN $wpdb->posts p ON (p.ID = pm.post_id) WHERE pm.meta_key = '".ANSPRESS_BEST_META."' AND pm.meta_value = 1 AND p.post_type = 'answer' AND p.post_author = %d", $user_id);
$key = md5($query);
$cache = wp_cache_get($key, 'count');
if($cache === false){
$count = $wpdb->get_var( $query);
wp_cache_set($key, $count, 'count');
}else
$count = $cache;
return apply_filters( 'ap_user_best_answer_count', $count, $user_id );
}
/**
* For user display name
* It can be filtered for adding cutom HTML
* @param mixed $args
* @return string
* @since 0.1
*/
function ap_user_display_name($args = array()){
global $post;
$defaults = array(
'user_id' => get_the_author_meta('ID'),
'html' => false,
'echo' => false,
'anonymous_label' => __('Anonymous', 'ap')
);
if(!is_array($args)){
$defaults['user_id'] = $args;
$args = $defaults;
}else{
$args = wp_parse_args( $args, $defaults );
}
extract($args);
$return = '';
if ($user_id > 0){
$user = get_userdata($user_id);
if(!$html)
$return = $user->display_name;
else
$return = ''.$user->display_name.'';
}elseif($post->post_type =='question' || $post->post_type =='answer' ){
$name = get_post_meta($post->ID, 'anonymous_name', true);
if(!$html){
if($name != '')
$return = $name;
else
$return = $anonymous_label;
}else{
if($name != '')
$return = ''.$name.__(' (anonymous)', 'ap').'';
else
$return = ''.$anonymous_label.'';
}
}else{
$return = ''.$anonymous_label.'';
}
/**
* FILTER: ap_user_display_name
* Filter can be used to alter display name
* @var string
* @since 2.0.1
*/
$return = apply_filters('ap_user_display_name', $return );
if($echo)
echo $return;
else
return $return;
}
/**
* Link to user user pages
* @param int $user_id user id
* @param string $sub page slug
* @return string
* @since unknown
*/
function ap_user_link($user_id = false, $sub = false){
if(!$user_id)
$user_id = get_the_author_meta('ID');
if($user_id == 0)
return false;
$user = get_userdata($user_id);
$base = add_query_arg(array('user' => $user->user_login), get_permalink(ap_opt('user_page_id') ));
$args = $base;
/* TODO: REWRITE - fix when rewrite is active */
if(get_option('permalink_structure') != ''){
if($sub !== false)
$args = add_query_arg(array('user_page' => $sub), $base);
}else{
if($sub !== false)
$args = add_query_arg(array('user_page' => $sub), $base);
}
return $args ;
}
/**
* Output user menu
* Extract menu from registered user pages
* @return void
* @since 2.0.1
*/
function ap_user_menu(){
global $user_pages;
$userid = ap_user_page_user_id();
$user_page = get_query_var('user_page');
$user_page = $user_page ? $user_page : 'profile';
$menus = array();
foreach($user_pages as $k => $args){
$link = ap_user_link($userid, $k);
$menus[$k] = array( 'title' => $args['title'], 'link' => $link);
}
/*$menus = array(
'profile' => array( 'name' => __('Profile', 'ap'), 'link' => ap_user_link($userid), 'icon' => 'ap-icon-user'),
'questions' => array( 'name' => __('Questions', 'ap'), 'link' => ap_user_link($userid, 'questions'), 'icon' => 'ap-icon-question'),
'answers' => array( 'name' => __('Answers', 'ap'), 'link' => ap_user_link($userid, 'answers'), 'icon' => 'ap-icon-answer'),
'badges' => array( 'name' => __('Badges', 'ap'), 'link' => ap_user_link($userid, 'badges'), 'icon' => 'ap-icon-badge'),
'favorites' => array( 'name' => __('Favorites', 'ap'), 'link' => ap_user_link($userid, 'favorites'), 'icon' => 'ap-icon-star'),
'followers' => array( 'name' => __('Followers', 'ap'), 'link' => ap_user_link($userid, 'followers'), 'icon' => 'ap-icon-users'),
'following' => array( 'name' => __('Following', 'ap'), 'link' => ap_user_link($userid, 'following'), 'icon' => 'ap-icon-users'),
'edit_profile' => array( 'name' => __('Edit Profile', 'ap'), 'link' => ap_user_link($userid, 'edit_profile'), 'icon' => 'ap-icon-pencil', 'own' => true),
//'settings' => array( 'name' => __('Settings', 'ap'), 'link' => ap_user_link($userid, 'settings'), 'icon' => 'ap-icon-cog'),
);*/
/**
* FILTER: ap_user_menu
* filter is applied before showing user menu
* @var array
* @since unknown
*/
$menus = apply_filters('ap_user_menu', $menus);
$o ='';
echo $o;
}
function ap_user_page_menu(){
if(!is_my_profile())
return;
$userid = ap_user_page_user_id();
$user_page = get_query_var('user_page');
$user_page = $user_page ? $user_page : 'profile';
$menus = array();
/* filter for overriding menu */
$menus = apply_filters('ap_user_page_menu', $menus, $userid);
if(!empty($menus)){
$o ='';
echo $o;
}
}
function ap_get_current_user_page_template(){
$user_page = get_query_var('user_page');
$user_page = $user_page ? $user_page : 'profile';
$template = 'user-'.$user_page.'.php';
return apply_filters('ap_get_current_user_page_template', $template);
}
/**
* Output user page
* @return void
* @since 2.0
*/
function ap_user_page(){
global $user_pages;
$user_id = ap_user_page_user_id();
$user_page = ap_active_user_page();
call_user_func($user_pages[$user_page]['func']);
}
/**
* Get active user page
* @return string
* @since 2.0.1
*/
function ap_active_user_page(){
$user_page = sanitize_text_field(get_query_var('user_page'));
return $user_page ? $user_page : 'profile';
}
/**
* Return object of current user page
* @since 2.0
*/
function ap_user(){
global $ap_user;
return $ap_user;
}
/**
* return $User->data of active user in user page
* @return object
* @since 2.0
*/
function ap_user_data()
{
global $ap_user_data;
return $ap_user_data;
}
/**
* Return meta of active user in user page
* @param string $meta key of meta
* @return string
* @since unknown
*/
function ap_get_current_user_meta($meta)
{
global $ap_current_user_meta;
if($meta == 'followers')
return @$ap_current_user_meta[AP_FOLLOWERS_META] ? $ap_current_user_meta[AP_FOLLOWERS_META] : 0;
elseif($meta == 'following')
return @$ap_current_user_meta[AP_FOLLOWING_META] ? $ap_current_user_meta[AP_FOLLOWING_META] : 0;
elseif(isset($ap_current_user_meta[$meta]))
return $ap_current_user_meta[$meta];
return false;
}
function ap_user_template(){
$userid = ap_user_page_user_id();
$user_meta = (object) array_map( 'ap_meta_array_map', get_user_meta($userid));
if(is_ap_followers()){
$total_followers = ap_get_current_user_meta('followers');
// how many users to show per page
$users_per_page = ap_opt('followers_limit');
// grab the current page number and set to 1 if no page number is set
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
// calculate the total number of pages.
$total_pages = 1;
$offset = $users_per_page * ($paged - 1);
$total_pages = ceil($total_followers / $users_per_page);
$args = array(
'ap_followers_query' => true,
'number' => $users_per_page,
'userid' => ap_user_page_user_id(),
'offset' => $offset
);
// The Query
$followers_query = new WP_User_Query( $args );
$followers = $followers_query->results;
$base = ap_user_link(ap_user_page_user_id(), 'followers') . '/%_%';
}elseif(ap_current_user_page_is('following')){
$total_following = ap_get_current_user_meta('following');
// how many users to show per page
$users_per_page = ap_opt('following_limit');
// grab the current page number and set to 1 if no page number is set
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
// calculate the total number of pages.
$total_pages = 1;
$offset = $users_per_page * ($paged - 1);
$total_pages = ceil($total_following / $users_per_page);
$args = array(
'ap_following_query' => true,
'number' => $users_per_page,
'userid' => ap_user_page_user_id(),
'offset' => $offset
);
// The Query
$following_query = new WP_User_Query( $args );
$following = $following_query->results;
$base = ap_user_link(ap_user_page_user_id(), 'following') . '/%_%';
}elseif(ap_current_user_page_is('questions')){
$order = get_query_var('sort');
$label = sanitize_text_field(get_query_var('label'));
if(empty($order ))
$order = 'active';//ap_opt('answers_sort');
if(empty($label ))
$label = '';
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$question_args=array(
'author' => ap_user_page_user_id(),
'post_type' => 'question',
'post_status' => 'publish',
'showposts' => ap_opt('question_per_page'),
'paged' => $paged
);
if($order == 'active'){
$question_args['orderby'] = 'meta_value';
$question_args['meta_key'] = ANSPRESS_UPDATED_META;
}elseif($order == 'voted'){
$question_args['orderby'] = 'meta_value_num';
$question_args['meta_key'] = ANSPRESS_VOTE_META;
}elseif($order == 'answers'){
$question_args['orderby'] = 'meta_value_num';
$question_args['meta_key'] = ANSPRESS_ANS_META;
}elseif($order == 'unanswered'){
$question_args['orderby'] = 'meta_value';
$question_args['meta_key'] = ANSPRESS_ANS_META;
$question_args['meta_value'] = '0';
}elseif($order == 'oldest'){
$question_args['orderby'] = 'date';
$question_args['order'] = 'ASC';
}
if ($label != ''){
$question_args['tax_query'] = array(
array(
'taxonomy' => 'question_label',
'field' => 'slug',
'terms' => $label
)
);
}
$question_args = apply_filters('ap_user_question_args', $question_args);
$question = new WP_Query( $question_args );
}elseif(ap_current_user_page_is('answers')){
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$order = get_query_var('sort');
if(empty($order ))
$order = ap_opt('answers_sort');
if($order == 'voted'){
$ans_args=array(
'author' => ap_user_page_user_id(),
'ap_query' => 'answer_sort_voted',
'post_type' => 'answer',
'post_status' => 'publish',
'showposts' => ap_opt('answers_per_page'),
'paged' => $paged,
'orderby' => 'meta_value_num',
'meta_key' => ANSPRESS_VOTE_META,
'meta_query'=>array(
'relation' => 'OR',
array(
'key' => ANSPRESS_BEST_META,
'compare' => '=',
'value' => '1'
),
array(
'key' => ANSPRESS_BEST_META,
'compare' => 'NOT EXISTS'
)
)
);
}elseif($order == 'oldest'){
$ans_args=array(
'author' => ap_user_page_user_id(),
'ap_query' => 'answer_sort_newest',
'post_type' => 'answer',
'post_status' => 'publish',
'showposts' => ap_opt('answers_per_page'),
'paged' => $paged,
'orderby' => 'meta_value date',
'meta_key' => ANSPRESS_BEST_META,
'order' => 'ASC',
'meta_query'=>array(
'relation' => 'OR',
array(
'key' => ANSPRESS_BEST_META,
'compare' => 'NOT EXISTS'
)
)
);
}else{
$ans_args=array(
'author' => ap_user_page_user_id(),
'ap_query' => 'answer_sort_newest',
'post_type' => 'answer',
'post_status' => 'publish',
'showposts' => ap_opt('answers_per_page'),
'paged' => $paged,
'orderby' => 'meta_value date',
'meta_key' => ANSPRESS_BEST_META,
'order' => 'DESC',
'meta_query'=>array(
'relation' => 'OR',
array(
'key' => ANSPRESS_BEST_META,
'compare' => 'NOT EXISTS'
)
)
);
}
$ans_args = apply_filters('ap_user_answers_args', $ans_args);
$answer = new WP_Query($ans_args);
}elseif(ap_current_user_page_is('favorites')){
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$args=array(
'author' => ap_user_page_user_id(),
'ap_query' => 'user_favorites',
'post_type' => 'question',
'post_status' => 'publish',
'showposts' => ap_opt('answers_per_page'),
'paged' => $paged,
'orderby' => 'date',
'order' => 'DESC'
);
$args = apply_filters('ap_user_favorites_args', $args);
$question = new WP_Query($args);
}elseif(ap_current_user_page_is('messages')){
if(ap_user_page_user_id() != get_current_user_id()){
_e('You do not have access here', 'ap');
return;
}
}elseif(ap_current_user_page_is('message')){
if(ap_user_page_user_id() != get_current_user_id()){
_e('You do not have access here', 'ap');
return;
}
$message_id = get_query_var('message_id');
}elseif(ap_current_user_page_is('badges')){
$user_badges = ap_get_users_all_badges(ap_user_page_user_id());
$count_badges = ap_user_badge_count_by_badge(ap_user_page_user_id());
}
global $user;
global $current_user_meta;
include ap_get_theme_location(ap_get_current_user_page_template());
// Restore original Post Data
if(ap_current_user_page_is('questions') || ap_current_user_page_is('answers') || ap_current_user_page_is('favorites'))
wp_reset_postdata();
}
function ap_cover_upload_form(){
if(ap_user_can_upload_cover() && ap_user_page_user_id() == get_current_user_id()){
?>
array('name' => __('About me', 'ap'), 'title' => __('Edit your "about me" section', 'ap'), 'active' => true),
'ap-account' => array('name' => __('Account', 'ap'), 'title' => __('Edit your account information', 'ap')),
);
$menu = apply_filters('ap_edit_profile_nav', $menu);
?>
'. ap_user_display_name(array('html' => true)) .'';
/**
* FILTER: ap_user_display_meta_array
* Can be used to alter user display meta
* @var array
*/
$metas = apply_filters('ap_user_display_meta_array', $metas );
$output = '';
if(!empty($metas) && is_array($metas) && count($metas) > 0){
$output .= '';
foreach($metas as $meta){
$output .= $meta. ' ';
}
$output .= '
';
}
if($echo)
echo $output;
else
return $output;
}
function ap_user_profile_meta($echo = true)
{
$user_id = ap_user_page_user_id();
$ap_user = ap_user();
$ap_user_data = ap_user_data();
$metas = array();
$metas['display_name'] = ''.$ap_user_data->display_name.'';
$metas['url'] = ''.ap_get_current_user_meta('user_url').'';
/**
* FILTER: ap_user_profile_meta
* Can be used to alter user profile meta
* @var string
*/
$metas = apply_filters('ap_user_profile_meta', $metas );
$output = '';
if(!empty($metas) && is_array($metas) && count($metas) > 0){
$output .= '';
foreach($metas as $meta){
$output .= $meta. ' ';
}
$output .= '
';
}
if($echo)
echo $output;
else
return $output;
}
function ap_profile_user_stats_counts($echo = true){
$user_id = ap_user_page_user_id();
$ap_user = ap_user();
$ap_user_data = ap_user_data();
$metas = array();
$metas['points'] = ''.ap_get_points($user_id, true).''.__('Points', 'ap').'';
$metas['followers'] = ''.ap_get_current_user_meta('followers').''.__('Followers', 'ap').'';
$metas['following'] = ''.ap_get_current_user_meta('following').''.__('Following', 'ap').'';
/**
* FILTER: ap_profile_user_stats_counts
* Can be used to alter user profile stats counts
* @var string
*/
$metas = apply_filters('ap_profile_user_stats_counts', $metas );
$output = '';
if(!empty($metas) && is_array($metas) && count($metas) > 0){
$output .= '';
foreach($metas as $meta){
$output .= '- '. $meta. '
';
}
$output .= '
';
}
if($echo)
echo $output;
else
return $output;
}