/** * 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'); }
/** * Sets the topic reply count. * * @since 1.0.0 * @access public * @param int $topic_id * @param int $count * @return bool */ function mb_set_topic_reply_count($topic_id, $count) { return update_post_meta($topic_id, mb_get_topic_reply_count_meta_key(), $count); }
/** * Filter on the `request` hook to change what posts are loaded. * * @since 1.0.0 * @access public * @param array $vars * @return array */ public function request($vars) { $new_vars = array(); /* Load topics of a specific forum. */ if (isset($_GET['post_parent'])) { $new_vars['post_parent'] = mb_get_forum_id($_GET['post_parent']); } elseif (isset($_GET['topic_type']) && mb_topic_type_exists($_GET['topic_type'])) { $new_vars['meta_key'] = mb_get_topic_type_meta_key(); $new_vars['meta_value'] = sanitize_key($_GET['topic_type']); } elseif (isset($vars['orderby']) && 'post_parent' === $vars['orderby']) { $new_vars['orderby'] = 'post_parent'; } elseif (isset($vars['orderby']) && 'reply_count' === $vars['orderby']) { $new_vars['orderby'] = 'meta_value_num'; $new_vars['meta_key'] = mb_get_topic_reply_count_meta_key(); } elseif (isset($vars['orderby']) && 'voice_count' === $vars['orderby']) { $new_vars['orderby'] = 'meta_value_num'; $new_vars['meta_key'] = mb_get_topic_voice_count_meta_key(); } elseif (isset($vars['orderby']) && 'post_author' === $vars['orderby']) { $new_vars['orderby'] = 'post_author'; } /* Return the vars, merging with the new ones. */ return array_merge($vars, $new_vars); }
/** * Returns the topic reply count. * * @since 1.0.0 * @access public * @param int $topic_id * @return int */ function mb_get_topic_reply_count($topic_id = 0) { $topic_id = mb_get_topic_id($topic_id); $reply_count = get_post_meta($topic_id, mb_get_topic_reply_count_meta_key(), true); return apply_filters('mb_get_topic_reply_count', absint($reply_count), $topic_id); }