/** * Registers custom meta keys with WordPress and provides callbacks for sanitizing and authorizing * the metadata. * * @since 1.0.0 * @access public * @return void */ function mb_register_meta() { /* General post meta. */ register_meta('post', mb_get_prev_status_meta_key(), 'sanitize_key', '__return_true'); /* Forum meta. */ register_meta('post', mb_get_forum_activity_datetime_meta_key(), 'esc_html', '__return_true'); register_meta('post', mb_get_forum_activity_datetime_epoch_meta_key(), 'esc_html', '__return_true'); register_meta('post', mb_get_forum_last_topic_id_meta_key(), 'absint', '__return_true'); register_meta('post', mb_get_forum_last_reply_id_meta_key(), 'absint', '__return_true'); register_meta('post', mb_get_forum_subforum_count_meta_key(), 'absint', '__return_true'); register_meta('post', mb_get_forum_topic_count_meta_key(), 'absint', '__return_true'); register_meta('post', mb_get_forum_reply_count_meta_key(), 'absint', '__return_true'); register_meta('post', mb_get_forum_type_meta_key(), 'esc_html', '__return_true'); register_meta('post', mb_get_forum_level_meta_key(), 'absint', '__return_true'); /* Topic meta. */ register_meta('post', mb_get_topic_activity_datetime_meta_key(), 'esc_html', '__return_true'); register_meta('post', mb_get_topic_activity_datetime_epoch_meta_key(), 'esc_html', '__return_true'); register_meta('post', mb_get_topic_last_reply_id_meta_key(), 'absint', '__return_true'); register_meta('post', mb_get_topic_voices_meta_key(), 'esc_html', '__return_true'); register_meta('post', mb_get_topic_voice_count_meta_key(), 'absint', '__return_true'); register_meta('post', mb_get_topic_reply_count_meta_key(), 'absint', '__return_true'); register_meta('post', mb_get_topic_type_meta_key(), 'esc_html', '__return_true'); /* User meta. */ register_meta('user', mb_get_user_forum_subscriptions_meta_key(), 'esc_html', '__return_true'); register_meta('user', mb_get_user_topic_subscriptions_meta_key(), 'esc_html', '__return_true'); register_meta('user', mb_get_user_topic_bookmarks_meta_key(), 'esc_html', '__return_true'); register_meta('user', mb_get_user_forum_count_meta_key(), 'absint', '__return_true'); register_meta('user', mb_get_user_topic_count_meta_key(), 'absint', '__return_true'); register_meta('user', mb_get_user_reply_count_meta_key(), 'absint', '__return_true'); }
function mb_set_user_reply_count($user_id) { global $wpdb; // @todo check all public reply statuses $where = $wpdb->prepare("WHERE post_author = %d AND post_type = %s AND post_status = %s", $user_id, mb_get_reply_post_type(), mb_get_publish_post_status()); $count = $wpdb->get_var("SELECT COUNT(*) FROM {$wpdb->posts} {$where}"); update_user_meta($user_id, mb_get_user_reply_count_meta_key(), $count); return $count; }
/** * Filter on the user query to change the users loaded. * * @since 1.0.0 * @access public * @param object $query * @return void */ public function pre_get_users($query) { if ('topic_count' === $query->get('orderby')) { $query->set('orderby', 'meta_value_num'); $query->set('meta_key', mb_get_user_topic_count_meta_key()); } elseif ('reply_count' === $query->get('orderby')) { $query->set('orderby', 'meta_value_num'); $query->set('meta_key', mb_get_user_reply_count_meta_key()); } }
/** * Returns a user's reply count. * * @since 1.0.0 * @access public * @param int $user_id * @return int */ function mb_get_user_reply_count($user_id = 0) { $user_id = mb_get_user_id($user_id); $count = get_user_meta($user_id, mb_get_user_reply_count_meta_key(), true); if ('' === $count) { $count = mb_set_user_reply_count($user_id); } $count = !empty($count) ? absint($count) : 0; return apply_filters('mb_get_user_reply_count', $count, $user_id); }