示例#1
0
 public function prepare_archive_posts()
 {
     global $wp_query, $dwqa_general_settings;
     $posts_per_page = isset($dwqa_general_settings['posts-per-page']) ? $dwqa_general_settings['posts-per-page'] : 5;
     $user = isset($_GET['user']) && !empty($_GET['user']) ? urldecode($_GET['user']) : false;
     $filter = isset($_GET['filter']) && !empty($_GET['filter']) ? $_GET['filter'] : 'all';
     $search_text = isset($_GET['qs']) ? $_GET['qs'] : false;
     $sort = isset($_GET['sort']) ? $_GET['sort'] : '';
     $query = array('post_type' => 'dwqa-question', 'posts_per_page' => $posts_per_page, 'orderby' => 'modified');
     $page_text = dwqa_is_front_page() ? 'page' : 'paged';
     $paged = get_query_var($page_text);
     $query['paged'] = $paged ? $paged : 1;
     // filter by category
     $cat = get_query_var('dwqa-question_category') ? get_query_var('dwqa-question_category') : false;
     if ($cat) {
         $query['tax_query'][] = array('taxonomy' => 'dwqa-question_category', 'terms' => $cat, 'field' => 'slug');
     }
     // filter by tags
     $tag = get_query_var('dwqa-question_tag') ? get_query_var('dwqa-question_tag') : false;
     if ($tag) {
         $query['tax_query'][] = array('taxonomy' => 'dwqa-question_tag', 'terms' => $tag, 'field' => 'slug');
     }
     // filter by user
     if ($user) {
         $user = get_user_by('login', $user);
         $query['author'] = $user->ID;
     }
     switch ($sort) {
         // sort by views count
         case 'views':
             $query['meta_key'] = '_dwqa_views';
             $query['orderby'] = 'meta_value_num';
             break;
             // sort by answers count
         // sort by answers count
         case 'answers':
             $query['meta_key'] = '_dwqa_answers_count';
             $query['orderby'] = 'meta_value_num';
             break;
             // sort by votes count
         // sort by votes count
         case 'votes':
             $query['meta_key'] = '_dwqa_votes';
             $query['orderby'] = 'meta_value_num';
             break;
     }
     // filter by status
     switch ($filter) {
         case 'open':
             $query['meta_query'][] = array('key' => '_dwqa_status', 'value' => array('open', 're-open'), 'compare' => 'IN');
             break;
         case 'resolved':
             $query['meta_query'][] = array('key' => '_dwqa_status', 'value' => array('resolved'), 'compare' => 'IN');
             break;
         case 'closed':
             $query['meta_query'][] = array('key' => '_dwqa_status', 'value' => array('closed'), 'compare' => 'IN');
             break;
         case 'unanswered':
             $query['meta_query'][] = array('key' => '_dwqa_status', 'value' => array('open', 'pending'), 'compare' => 'IN');
             break;
         case 'subscribes':
             if ($user) {
                 $query['meta_query'][] = array('key' => '_dwqa_followers', 'value' => $user->ID, 'compare' => '=');
             }
             break;
         case 'my-questions':
             if (is_user_logged_in()) {
                 $query['author'] = get_current_user_id();
             }
             break;
         case 'my-subscribes':
             if (is_user_logged_in()) {
                 $query['meta_query'][] = array('key' => '_dwqa_followers', 'value' => get_current_user_id(), 'compare' => '=');
             }
             break;
     }
     // search
     if ($search_text) {
         $search = sanitize_text_field($search_text);
         preg_match_all('/#\\S*\\w/i', $search_text, $matches);
         if ($matches && is_array($matches) && count($matches) > 0 && count($matches[0]) > 0) {
             $query['tax_query'][] = array('taxonomy' => 'dwqa-question_tag', 'field' => 'slug', 'terms' => $matches[0], 'operator' => 'IN');
             $search = preg_replace('/#\\S*\\w/i', '', $search);
         }
         $query['s'] = $search;
     }
     $sticky_questions = get_option('dwqa_sticky_questions');
     // exclude sticky question
     if ($sticky_questions && 'all' == $filter && !$sort && !$search_text) {
         $query['post__not_in'] = $sticky_questions;
     }
     if (is_user_logged_in()) {
         $query['post_status'] = array('publish', 'private', 'pending');
     }
     $wp_query->dwqa_questions = new WP_Query($query);
 }
示例#2
0
function dwqa_question_paginate_link()
{
    global $wp_query, $dwqa_general_settings;
    $archive_question_url = get_permalink($dwqa_general_settings['pages']['archive-question']);
    $page_text = dwqa_is_front_page() ? 'page' : 'paged';
    $page = get_query_var($page_text) ? get_query_var($page_text) : 1;
    $args = array('base' => add_query_arg($page_text, '%#%', $archive_question_url), 'format' => '', 'current' => $page, 'total' => $wp_query->dwqa_questions->max_num_pages);
    $paginate = paginate_links($args);
    $paginate = str_replace('page-number', 'dwqa-page-number', $paginate);
    $paginate = str_replace('current', 'dwqa-current', $paginate);
    $paginate = str_replace('next', 'dwqa-next', $paginate);
    $paginate = str_replace('prev ', 'dwqa-prev ', $paginate);
    $paginate = str_replace('dots', 'dwqa-dots', $paginate);
    if ($wp_query->dwqa_questions->max_num_pages > 1) {
        echo '<div class="dwqa-pagination">';
        echo $paginate;
        echo '</div>';
    }
}