protected function init($prefs = array(), $wp_query = null)
{
if (!$wp_query) {
global $wp_query;
}
// use the current page from the provided query if available; else fall back to the global
$paged = isset($wp_query->query_vars['paged']) ? $wp_query->query_vars['paged'] : get_query_var('paged');
global $wp_rewrite;
$args = array();
// calculate the total number of pages based on found posts and posts per page
$ppp = 10;
if (isset($wp_query->query_vars['posts_per_page'])) {
$ppp = $wp_query->query_vars['posts_per_page'];
}
$args['total'] = ceil($wp_query->found_posts / $ppp);
if ($wp_rewrite->using_permalinks()) {
$url = explode('?', get_pagenum_link(0));
if (isset($url[1])) {
parse_str($url[1], $query);
$args['add_args'] = $query;
}
$args['format'] = $wp_rewrite->pagination_base . '/%#%';
$args['base'] = trailingslashit($url[0]) . '%_%';
} else {
$big = 999999999;
$args['base'] = str_replace($big, '%#%', esc_url(get_pagenum_link($big)));
}
$args['type'] = 'array';
$args['current'] = max(1, $paged);
$args['mid_size'] = max(9 - $args['current'], 3);
if (is_int($prefs)) {
$args['mid_size'] = $prefs - 2;
} else {
$args = array_merge($args, $prefs);
}
$this->current = $args['current'];
$this->total = $args['total'];
$this->pages = Pagination::paginate_links($args);
if ($this->total <= count($this->pages)) {
// decrement current so that it matches up with the 0 based index used by the pages array
$current = $this->current - 1;
} else {
// $data['current'] can't be used b/c there are more than 10 pages and we are condensing with dots
foreach ($this->pages as $key => $page) {
if (!empty($page['current'])) {
$current = $key;
break;
}
}
}
// set next and prev using pages array generated by paginate links
if (isset($current) && isset($this->pages[$current + 1])) {
$this->next = array('link' => user_trailingslashit($this->pages[$current + 1]['link']), 'class' => 'page-numbers next');
if (Pagination::is_search_query($this->next['link'])) {
$this->next['link'] = untrailingslashit($this->next['link']);
}
}
if (isset($current) && isset($this->pages[$current - 1])) {
$this->prev = array('link' => user_trailingslashit($this->pages[$current - 1]['link']), 'class' => 'page-numbers prev');
if (Pagination::is_search_query($this->prev['link'])) {
$this->prev['link'] = untrailingslashit($this->prev['link']);
}
}
if ($paged < 2) {
$this->prev = '';
}
if ($this->total === (double) 0) {
$this->next = '';
}
}