/** * 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'); }
/** * 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(); /* Default ordering alphabetically. */ if (!isset($vars['order']) && !isset($vars['orderby'])) { $vars = array_merge($vars, array('order' => 'ASC', 'orderby' => 'menu_order title')); } elseif (isset($_GET['post_parent'])) { $new_vars['post_parent'] = mb_get_forum_id($_GET['post_parent']); } elseif (isset($_GET['forum_type'])) { $forum_type = mb_get_forum_type_object(sanitize_key($_GET['forum_type'])); if ($forum_type) { $new_vars['meta_key'] = mb_get_forum_type_meta_key(); $new_var['meta_value'] = $forum_type->name; } } elseif (isset($vars['orderby']) && 'forum_type' === $vars['orderby']) { $new_vars['orderby'] = 'meta_value'; $new_vars['meta_key'] = mb_get_forum_type_meta_key(); } elseif (isset($vars['orderby']) && 'subforum_count' === $vars['orderby']) { $new_vars['orderby'] = 'meta_value_num'; $new_vars['meta_key'] = mb_get_forum_subforum_count_meta_key(); } elseif (isset($vars['orderby']) && 'topic_count' === $vars['orderby']) { $new_vars['orderby'] = 'meta_value_num'; $new_vars['meta_key'] = mb_get_forum_topic_count_meta_key(); } elseif (isset($vars['orderby']) && 'reply_count' === $vars['orderby']) { $new_vars['orderby'] = 'meta_value_num'; $new_vars['meta_key'] = mb_get_forum_reply_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); }
/** * Sets the forum topic count * * @since 1.0.0 * @access public * @param int $forum_id * @param int $count * @return bool */ function mb_set_forum_topic_count($forum_id, $count) { return update_post_meta($forum_id, mb_get_forum_topic_count_meta_key(), $count); }
function mb_get_forum_topic_count($forum_id = 0) { $forum_id = mb_get_forum_id($forum_id); $count = get_post_meta($forum_id, mb_get_forum_topic_count_meta_key(), true); if ('' === $count) { $count = mb_reset_forum_topic_count($forum_id); } return absint($count); }