WordPress.org

Make WordPress Core

Changeset 3639


Ignore:
Timestamp:
03/13/06 01:44:32 (8 years ago)
Author:
ryan
Message:

Move WP_Query and its wrapper functions to query.php. #2525

Location:
trunk
Files:
1 added
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/wp-includes/classes.php

    r3638 r3639  
    11<?php 
    2  
    3 class WP_Query { 
    4     var $query; 
    5     var $query_vars; 
    6     var $queried_object; 
    7     var $queried_object_id; 
    8     var $request; 
    9  
    10     var $posts; 
    11     var $post_count = 0; 
    12     var $current_post = -1; 
    13     var $in_the_loop = false; 
    14     var $post; 
    15  
    16     var $is_single = false; 
    17     var $is_preview = false; 
    18     var $is_page = false; 
    19     var $is_archive = false; 
    20     var $is_date = false; 
    21     var $is_year = false; 
    22     var $is_month = false; 
    23     var $is_day = false; 
    24     var $is_time = false; 
    25     var $is_author = false; 
    26     var $is_category = false; 
    27     var $is_search = false; 
    28     var $is_feed = false; 
    29     var $is_trackback = false; 
    30     var $is_home = false; 
    31     var $is_404 = false; 
    32     var $is_comments_popup = false; 
    33     var $is_admin = false; 
    34     var $is_attachment = false; 
    35  
    36     function init_query_flags() { 
    37         $this->is_single = false; 
    38         $this->is_page = false; 
    39         $this->is_archive = false; 
    40         $this->is_date = false; 
    41         $this->is_year = false; 
    42         $this->is_month = false; 
    43         $this->is_day = false; 
    44         $this->is_time = false; 
    45         $this->is_author = false; 
    46         $this->is_category = false; 
    47         $this->is_search = false; 
    48         $this->is_feed = false; 
    49         $this->is_trackback = false; 
    50         $this->is_home = false; 
    51         $this->is_404 = false; 
    52         $this->is_paged = false; 
    53         $this->is_admin = false; 
    54         $this->is_attachment = false; 
    55     } 
    56  
    57     function init () { 
    58         unset($this->posts); 
    59         unset($this->query); 
    60         unset($this->query_vars); 
    61         unset($this->queried_object); 
    62         unset($this->queried_object_id); 
    63         $this->post_count = 0; 
    64         $this->current_post = -1; 
    65         $this->in_the_loop = false; 
    66  
    67         $this->init_query_flags(); 
    68     } 
    69  
    70     // Reparse the query vars. 
    71     function parse_query_vars() { 
    72         $this->parse_query(''); 
    73     } 
    74  
    75     // Parse a query string and set query type booleans. 
    76     function parse_query ($query) { 
    77         if ( !empty($query) || !isset($this->query) ) { 
    78             $this->init(); 
    79             parse_str($query, $qv); 
    80             $this->query = $query; 
    81             $this->query_vars = $qv; 
    82         } 
    83  
    84         if ('404' == $qv['error']) { 
    85             $this->is_404 = true; 
    86             if ( !empty($query) ) { 
    87                 do_action('parse_query', array(&$this)); 
    88             } 
    89             return; 
    90         } 
    91  
    92         $qv['m'] =  (int) $qv['m']; 
    93         $qv['p'] =  (int) $qv['p']; 
    94  
    95         // Compat.  Map subpost to attachment. 
    96         if ( '' != $qv['subpost'] ) 
    97             $qv['attachment'] = $qv['subpost']; 
    98         if ( '' != $qv['subpost_id'] ) 
    99             $qv['attachment_id'] = $qv['subpost_id']; 
    100  
    101         if ( ('' != $qv['attachment']) || (int) $qv['attachment_id'] ) { 
    102             $this->is_single = true; 
    103             $this->is_attachment = true; 
    104         } elseif ('' != $qv['name']) { 
    105             $this->is_single = true; 
    106         } elseif ( $qv['p'] ) { 
    107             $this->is_single = true; 
    108         } elseif (('' != $qv['hour']) && ('' != $qv['minute']) &&('' != $qv['second']) && ('' != $qv['year']) && ('' != $qv['monthnum']) && ('' != $qv['day'])) { 
    109             // If year, month, day, hour, minute, and second are set, a single  
    110             // post is being queried.         
    111             $this->is_single = true; 
    112         } elseif ('' != $qv['static'] || '' != $qv['pagename'] || '' != $qv['page_id']) { 
    113             $this->is_page = true; 
    114             $this->is_single = false; 
    115         } elseif (!empty($qv['s'])) { 
    116             $this->is_search = true; 
    117         } else { 
    118         // Look for archive queries.  Dates, categories, authors. 
    119  
    120             if ( (int) $qv['second']) { 
    121                 $this->is_time = true; 
    122                 $this->is_date = true; 
    123             } 
    124  
    125             if ( (int) $qv['minute']) { 
    126                 $this->is_time = true; 
    127                 $this->is_date = true; 
    128             } 
    129  
    130             if ( (int) $qv['hour']) { 
    131                 $this->is_time = true; 
    132                 $this->is_date = true; 
    133             } 
    134  
    135             if ( (int) $qv['day']) { 
    136                 if (! $this->is_date) { 
    137                     $this->is_day = true; 
    138                     $this->is_date = true; 
    139                 } 
    140             } 
    141  
    142             if ( (int)  $qv['monthnum']) { 
    143                 if (! $this->is_date) { 
    144                     $this->is_month = true; 
    145                     $this->is_date = true; 
    146                 } 
    147             } 
    148  
    149             if ( (int)  $qv['year']) { 
    150                 if (! $this->is_date) { 
    151                     $this->is_year = true; 
    152                     $this->is_date = true; 
    153                 } 
    154             } 
    155  
    156             if ( (int)  $qv['m']) { 
    157                 $this->is_date = true; 
    158                 if (strlen($qv['m']) > 9) { 
    159                     $this->is_time = true; 
    160                 } else if (strlen($qv['m']) > 7) { 
    161                     $this->is_day = true; 
    162                 } else if (strlen($qv['m']) > 5) { 
    163                     $this->is_month = true; 
    164                 } else { 
    165                     $this->is_year = true; 
    166                 } 
    167             } 
    168  
    169             if ('' != $qv['w']) { 
    170                 $this->is_date = true; 
    171             } 
    172  
    173             if (empty($qv['cat']) || ($qv['cat'] == '0')) { 
    174                 $this->is_category = false; 
    175             } else { 
    176                 if (stristr($qv['cat'],'-')) { 
    177                     $this->is_category = false; 
    178                 } else { 
    179                     $this->is_category = true; 
    180                 } 
    181             } 
    182  
    183             if ('' != $qv['category_name']) { 
    184                 $this->is_category = true; 
    185             } 
    186              
    187             if ((empty($qv['author'])) || ($qv['author'] == '0')) { 
    188                 $this->is_author = false; 
    189             } else { 
    190                 $this->is_author = true; 
    191             } 
    192  
    193             if ('' != $qv['author_name']) { 
    194                 $this->is_author = true; 
    195             } 
    196  
    197             if ( ($this->is_date || $this->is_author || $this->is_category)) { 
    198                 $this->is_archive = true; 
    199             } 
    200         } 
    201  
    202         if ('' != $qv['feed']) { 
    203             $this->is_feed = true; 
    204         } 
    205  
    206         if ('' != $qv['tb']) { 
    207             $this->is_trackback = true; 
    208         } 
    209  
    210         if ('' != $qv['paged']) { 
    211             $this->is_paged = true; 
    212         } 
    213  
    214         if ('' != $qv['comments_popup']) { 
    215             $this->is_comments_popup = true; 
    216         } 
    217  
    218         //if we're previewing inside the write screen 
    219         if ('' != $qv['preview']) { 
    220             $this->is_preview = true; 
    221         } 
    222  
    223         if (strstr($_SERVER['PHP_SELF'], 'wp-admin/')) { 
    224             $this->is_admin = true; 
    225         } 
    226  
    227         if ( ! ($this->is_attachment || $this->is_archive || $this->is_single || $this->is_page || $this->is_search || $this->is_feed || $this->is_trackback || $this->is_404 || $this->is_admin || $this->is_comments_popup)) { 
    228             $this->is_home = true; 
    229         } 
    230  
    231         if ( !empty($query) ) { 
    232             do_action('parse_query', array(&$this)); 
    233         } 
    234     } 
    235  
    236     function set_404() { 
    237         $this->init_query_flags(); 
    238         $this->is_404 = true; 
    239     } 
    240  
    241     function get($query_var) { 
    242         if (isset($this->query_vars[$query_var])) { 
    243             return $this->query_vars[$query_var]; 
    244         } 
    245  
    246         return ''; 
    247     } 
    248  
    249     function set($query_var, $value) { 
    250         $this->query_vars[$query_var] = $value; 
    251     } 
    252  
    253     function &get_posts() { 
    254         global $wpdb, $pagenow, $user_ID; 
    255  
    256         do_action('pre_get_posts', array(&$this)); 
    257  
    258         // Shorthand. 
    259         $q = &$this->query_vars; 
    260  
    261         // First let's clear some variables 
    262         $whichcat = ''; 
    263         $whichauthor = ''; 
    264         $whichpage = ''; 
    265         $result = ''; 
    266         $where = ''; 
    267         $limits = ''; 
    268         $distinct = ''; 
    269         $join = ''; 
    270  
    271         if ( !isset($q['post_type']) ) 
    272             $q['post_type'] = 'post'; 
    273         $post_type = $q['post_type']; 
    274         if ( !isset($q['posts_per_page']) || $q['posts_per_page'] == 0 ) 
    275             $q['posts_per_page'] = get_settings('posts_per_page'); 
    276         if ( !isset($q['what_to_show']) ) 
    277             $q['what_to_show'] = get_settings('what_to_show'); 
    278         if ( isset($q['showposts']) && $q['showposts'] ) { 
    279             $q['showposts'] = (int) $q['showposts']; 
    280             $q['posts_per_page'] = $q['showposts']; 
    281         } 
    282         if ( (isset($q['posts_per_archive_page']) && $q['posts_per_archive_page'] != 0) && ($this->is_archive || $this->is_search) ) 
    283             $q['posts_per_page'] = $q['posts_per_archive_page']; 
    284         if ( !isset($q['nopaging']) ) { 
    285             if ($q['posts_per_page'] == -1) { 
    286                 $q['nopaging'] = true; 
    287             } else { 
    288                 $q['nopaging'] = false; 
    289             } 
    290         } 
    291         if ( $this->is_feed ) { 
    292             $q['posts_per_page'] = get_settings('posts_per_rss'); 
    293             $q['what_to_show'] = 'posts'; 
    294         } 
    295  
    296         if ( $this->is_home && ( 'page' == get_option('show_on_front') ) && get_option('page_on_front') ) { 
    297             $this->is_page = true; 
    298             $this->is_home = false; 
    299             $q['page_id'] = get_option('page_on_front'); 
    300         } 
    301  
    302         if (isset($q['page'])) { 
    303             $q['page'] = trim($q['page'], '/'); 
    304             $q['page'] = (int) $q['page']; 
    305         } 
    306  
    307         $add_hours = intval(get_settings('gmt_offset')); 
    308         $add_minutes = intval(60 * (get_settings('gmt_offset') - $add_hours)); 
    309         $wp_posts_post_date_field = "post_date"; // "DATE_ADD(post_date, INTERVAL '$add_hours:$add_minutes' HOUR_MINUTE)"; 
    310  
    311         // If a month is specified in the querystring, load that month 
    312         if ( (int) $q['m'] ) { 
    313             $q['m'] = '' . preg_replace('|[^0-9]|', '', $q['m']); 
    314             $where .= ' AND YEAR(post_date)=' . substr($q['m'], 0, 4); 
    315             if (strlen($q['m'])>5) 
    316                 $where .= ' AND MONTH(post_date)=' . substr($q['m'], 4, 2); 
    317             if (strlen($q['m'])>7) 
    318                 $where .= ' AND DAYOFMONTH(post_date)=' . substr($q['m'], 6, 2); 
    319             if (strlen($q['m'])>9) 
    320                 $where .= ' AND HOUR(post_date)=' . substr($q['m'], 8, 2); 
    321             if (strlen($q['m'])>11) 
    322                 $where .= ' AND MINUTE(post_date)=' . substr($q['m'], 10, 2); 
    323             if (strlen($q['m'])>13) 
    324                 $where .= ' AND SECOND(post_date)=' . substr($q['m'], 12, 2); 
    325         } 
    326  
    327         if ( (int) $q['hour'] ) { 
    328             $q['hour'] = '' . intval($q['hour']); 
    329             $where .= " AND HOUR(post_date)='" . $q['hour'] . "'"; 
    330         } 
    331  
    332         if ( (int) $q['minute'] ) { 
    333             $q['minute'] = '' . intval($q['minute']); 
    334             $where .= " AND MINUTE(post_date)='" . $q['minute'] . "'"; 
    335         } 
    336  
    337         if ( (int) $q['second'] ) { 
    338             $q['second'] = '' . intval($q['second']); 
    339             $where .= " AND SECOND(post_date)='" . $q['second'] . "'"; 
    340         } 
    341  
    342         if ( (int) $q['year'] ) { 
    343             $q['year'] = '' . intval($q['year']); 
    344             $where .= " AND YEAR(post_date)='" . $q['year'] . "'"; 
    345         } 
    346  
    347         if ( (int) $q['monthnum'] ) { 
    348             $q['monthnum'] = '' . intval($q['monthnum']); 
    349             $where .= " AND MONTH(post_date)='" . $q['monthnum'] . "'"; 
    350         } 
    351  
    352         if ( (int) $q['day'] ) { 
    353             $q['day'] = '' . intval($q['day']); 
    354             $where .= " AND DAYOFMONTH(post_date)='" . $q['day'] . "'"; 
    355         } 
    356  
    357         // Compat.  Map subpost to attachment. 
    358         if ( '' != $q['subpost'] ) 
    359             $q['attachment'] = $q['subpost']; 
    360         if ( '' != $q['subpost_id'] ) 
    361             $q['attachment_id'] = $q['subpost_id']; 
    362  
    363         if ('' != $q['name']) { 
    364             $q['name'] = sanitize_title($q['name']); 
    365             $where .= " AND post_name = '" . $q['name'] . "'"; 
    366         } else if ('' != $q['pagename']) { 
    367             $reqpage = get_page_by_path($q['pagename']); 
    368             if ( !empty($reqpage) ) 
    369                 $reqpage = $reqpage->ID; 
    370             else 
    371                 $reqpage = 0; 
    372  
    373             if  ( ('page' == get_option('show_on_front') ) && ( $reqpage == get_option('page_for_posts') ) ) { 
    374                 $this->is_page = false; 
    375                 $this->is_home = true; 
    376             } else { 
    377                 $q['pagename'] = str_replace('%2F', '/', urlencode(urldecode($q['pagename']))); 
    378                 $page_paths = '/' . trim($q['pagename'], '/'); 
    379                 $q['pagename'] = sanitize_title(basename($page_paths)); 
    380                 $q['name'] = $q['pagename']; 
    381                 $where .= " AND (ID = '$reqpage')"; 
    382             } 
    383         } elseif ('' != $q['attachment']) { 
    384             $q['attachment'] = str_replace('%2F', '/', urlencode(urldecode($q['attachment']))); 
    385             $attach_paths = '/' . trim($q['attachment'], '/'); 
    386             $q['attachment'] = sanitize_title(basename($attach_paths)); 
    387             $q['name'] = $q['attachment']; 
    388             $where .= " AND post_name = '" . $q['attachment'] . "'"; 
    389         } 
    390  
    391         if ( (int) $q['w'] ) { 
    392             $q['w'] = ''.intval($q['w']); 
    393             $where .= " AND WEEK(post_date, 1)='" . $q['w'] . "'"; 
    394         } 
    395  
    396         if ( intval($q['comments_popup']) ) 
    397             $q['p'] = intval($q['comments_popup']); 
    398  
    399         // If a attachment is requested by number, let it supercede any post number. 
    400         if ( ($q['attachment_id'] != '') && (intval($q['attachment_id']) != 0) ) 
    401             $q['p'] = (int) $q['attachment_id']; 
    402  
    403         // If a post number is specified, load that post 
    404         if (($q['p'] != '') && intval($q['p']) != 0) { 
    405             $q['p'] =  (int) $q['p']; 
    406             $where = ' AND ID = ' . $q['p']; 
    407         } 
    408  
    409         if (($q['page_id'] != '') && (intval($q['page_id']) != 0)) { 
    410             $q['page_id'] = intval($q['page_id']); 
    411             if  ( ('page' == get_option('show_on_front') ) && ( $q['page_id'] == get_option('page_for_posts') ) ) { 
    412                 $this->is_page = false; 
    413                 $this->is_home = true; 
    414             } else { 
    415                 $q['p'] = $q['page_id']; 
    416                 $where = ' AND ID = '.$q['page_id']; 
    417             } 
    418         } 
    419  
    420         // If a search pattern is specified, load the posts that match 
    421         if (!empty($q['s'])) { 
    422             $q['s'] = addslashes_gpc($q['s']); 
    423             $search = ' AND ('; 
    424             $q['s'] = preg_replace('/, +/', ' ', $q['s']); 
    425             $q['s'] = str_replace(',', ' ', $q['s']); 
    426             $q['s'] = str_replace('"', ' ', $q['s']); 
    427             $q['s'] = trim($q['s']); 
    428             if ($q['exact']) { 
    429                 $n = ''; 
    430             } else { 
    431                 $n = '%'; 
    432             } 
    433             if (!$q['sentence']) { 
    434                 $s_array = explode(' ',$q['s']); 
    435                 $q['search_terms'] = $s_array; 
    436                 $search .= '((post_title LIKE \''.$n.$s_array[0].$n.'\') OR (post_content LIKE \''.$n.$s_array[0].$n.'\'))'; 
    437                 for ( $i = 1; $i < count($s_array); $i = $i + 1) { 
    438                     $search .= ' AND ((post_title LIKE \''.$n.$s_array[$i].$n.'\') OR (post_content LIKE \''.$n.$s_array[$i].$n.'\'))'; 
    439                 } 
    440                 $search .= ' OR (post_title LIKE \''.$n.$q['s'].$n.'\') OR (post_content LIKE \''.$n.$q['s'].$n.'\')'; 
    441                 $search .= ')'; 
    442             } else { 
    443                 $search = ' AND ((post_title LIKE \''.$n.$q['s'].$n.'\') OR (post_content LIKE \''.$n.$q['s'].$n.'\'))'; 
    444             } 
    445         } 
    446  
    447         // Category stuff 
    448  
    449         if ((empty($q['cat'])) || ($q['cat'] == '0') ||  
    450                 // Bypass cat checks if fetching specific posts 
    451                 ( $this->is_single || $this->is_page )) { 
    452             $whichcat=''; 
    453         } else { 
    454             $q['cat'] = ''.urldecode($q['cat']).''; 
    455             $q['cat'] = addslashes_gpc($q['cat']); 
    456             if (stristr($q['cat'],'-')) { 
    457                 // Note: if we have a negative, we ignore all the positives. It must 
    458                 // always mean 'everything /except/ this one'. We should be able to do 
    459                 // multiple negatives but we don't :-( 
    460                 $eq = '!='; 
    461                 $andor = 'AND'; 
    462                 $q['cat'] = explode('-',$q['cat']); 
    463                 $q['cat'] = intval($q['cat'][1]); 
    464             } else { 
    465                 $eq = '='; 
    466                 $andor = 'OR'; 
    467             } 
    468             $join = " LEFT JOIN $wpdb->post2cat ON ($wpdb->posts.ID = $wpdb->post2cat.post_id) "; 
    469             $cat_array = preg_split('/[,\s]+/', $q['cat']); 
    470             $whichcat .= ' AND (category_id '.$eq.' '.intval($cat_array[0]); 
    471             $whichcat .= get_category_children($cat_array[0], ' '.$andor.' category_id '.$eq.' '); 
    472             for ($i = 1; $i < (count($cat_array)); $i = $i + 1) { 
    473                 $whichcat .= ' '.$andor.' category_id '.$eq.' '.intval($cat_array[$i]); 
    474                 $whichcat .= get_category_children($cat_array[$i], ' '.$andor.' category_id '.$eq.' '); 
    475             } 
    476             $whichcat .= ')'; 
    477             if ($eq == '!=') { 
    478                 $q['cat'] = '-'.$q['cat']; // Put back the knowledge that we are excluding a category. 
    479             } 
    480         } 
    481  
    482         // Category stuff for nice URIs 
    483  
    484         global $cache_categories; 
    485         if ('' != $q['category_name']) { 
    486             $reqcat = get_category_by_path($q['category_name']); 
    487             $q['category_name'] = str_replace('%2F', '/', urlencode(urldecode($q['category_name']))); 
    488             $cat_paths = '/' . trim($q['category_name'], '/'); 
    489             $q['category_name'] = sanitize_title(basename($cat_paths)); 
    490  
    491             $cat_paths = '/' . trim(urldecode($q['category_name']), '/'); 
    492             $q['category_name'] = sanitize_title(basename($cat_paths)); 
    493             $cat_paths = explode('/', $cat_paths); 
    494             foreach($cat_paths as $pathdir) 
    495                 $cat_path .= ($pathdir!=''?'/':'') . sanitize_title($pathdir); 
    496  
    497             //if we don't match the entire hierarchy fallback on just matching the nicename 
    498             if ( empty($reqcat) ) 
    499                 $reqcat = get_category_by_path($q['category_name'], false); 
    500  
    501             if ( !empty($reqcat) ) 
    502                 $reqcat = $reqcat->cat_ID; 
    503             else 
    504                 $reqcat = 0; 
    505  
    506             $q['cat'] = $reqcat; 
    507                  
    508             $tables = ", $wpdb->post2cat, $wpdb->categories"; 
    509             $join = " LEFT JOIN $wpdb->post2cat ON ($wpdb->posts.ID = $wpdb->post2cat.post_id) LEFT JOIN $wpdb->categories ON ($wpdb->post2cat.category_id = $wpdb->categories.cat_ID) "; 
    510             $whichcat = " AND (category_id = '" . $q['cat'] . "'"; 
    511             $whichcat .= get_category_children($q['cat'], " OR category_id = "); 
    512             $whichcat .= ")"; 
    513         } 
    514  
    515         // Author/user stuff 
    516  
    517         if ((empty($q['author'])) || ($q['author'] == '0')) { 
    518             $whichauthor=''; 
    519         } else { 
    520             $q['author'] = ''.urldecode($q['author']).''; 
    521             $q['author'] = addslashes_gpc($q['author']); 
    522             if (stristr($q['author'], '-')) { 
    523                 $eq = '!='; 
    524                 $andor = 'AND'; 
    525                 $q['author'] = explode('-', $q['author']); 
    526                 $q['author'] = ''.intval($q['author'][1]); 
    527             } else { 
    528                 $eq = '='; 
    529                 $andor = 'OR'; 
    530             } 
    531             $author_array = preg_split('/[,\s]+/', $q['author']); 
    532             $whichauthor .= ' AND (post_author '.$eq.' '.intval($author_array[0]); 
    533             for ($i = 1; $i < (count($author_array)); $i = $i + 1) { 
    534                 $whichauthor .= ' '.$andor.' post_author '.$eq.' '.intval($author_array[$i]); 
    535             } 
    536             $whichauthor .= ')'; 
    537         } 
    538  
    539         // Author stuff for nice URIs 
    540  
    541         if ('' != $q['author_name']) { 
    542             if (stristr($q['author_name'],'/')) { 
    543                 $q['author_name'] = explode('/',$q['author_name']); 
    544                 if ($q['author_name'][count($q['author_name'])-1]) { 
    545                     $q['author_name'] = $q['author_name'][count($q['author_name'])-1];#no trailing slash 
    546                 } else { 
    547                     $q['author_name'] = $q['author_name'][count($q['author_name'])-2];#there was a trailling slash 
    548                 } 
    549             } 
    550             $q['author_name'] = sanitize_title($q['author_name']); 
    551             $q['author'] = $wpdb->get_var("SELECT ID FROM $wpdb->users WHERE user_nicename='".$q['author_name']."'"); 
    552             $whichauthor .= ' AND (post_author = '.intval($q['author']).')'; 
    553         } 
    554  
    555         $where .= $search.$whichcat.$whichauthor; 
    556  
    557         if ((empty($q['order'])) || ((strtoupper($q['order']) != 'ASC') && (strtoupper($q['order']) != 'DESC'))) { 
    558             $q['order']='DESC'; 
    559         } 
    560  
    561         // Order by 
    562         if (empty($q['orderby'])) { 
    563             $q['orderby'] = 'post_date '.$q['order']; 
    564         } else { 
    565             // Used to filter values 
    566             $allowed_keys = array('author', 'date', 'category', 'title', 'modified', 'menu_order'); 
    567             $q['orderby'] = urldecode($q['orderby']); 
    568             $q['orderby'] = addslashes_gpc($q['orderby']); 
    569             $orderby_array = explode(' ',$q['orderby']); 
    570             if ( empty($orderby_array) ) 
    571                 $orderby_array[] = $q['orderby']; 
    572             $q['orderby'] = ''; 
    573             for ($i = 0; $i < count($orderby_array); $i++) { 
    574                 // Only allow certain values for safety 
    575                 $orderby = $orderby_array[$i]; 
    576                 if ( 'menu_order' != $orderby ) 
    577                     $orderby = 'post_' . $orderby; 
    578                 if ( in_array($orderby_array[$i], $allowed_keys) ) 
    579                     $q['orderby'] .= (($i == 0) ? '' : ',') . "$orderby {$q['order']}"; 
    580             } 
    581             if ( empty($q['orderby']) ) 
    582                 $q['orderby'] = 'post_date '.$q['order']; 
    583         } 
    584  
    585         //$now = gmdate('Y-m-d H:i:59'); 
    586          
    587         //only select past-dated posts, except if a logged in user is viewing a single: then, if they 
    588         //can edit the post, we let them through 
    589         //if ($pagenow != 'post.php' && $pagenow != 'edit.php' && !($this->is_single && $user_ID)) { 
    590         //  $where .= " AND post_date_gmt <= '$now'"; 
    591         //  $distinct = 'DISTINCT'; 
    592         //} 
    593  
    594         if ( $this->is_attachment ) { 
    595             $where .= ' AND (post_type = "attachment")'; 
    596         } elseif ($this->is_page) { 
    597             $where .= ' AND (post_type = "page")'; 
    598         } elseif ($this->is_single) { 
    599             $where .= ' AND (post_type = "post")'; 
    600         } else { 
    601             $where .= " AND (post_type = '$post_type' AND (post_status = 'publish'"; 
    602  
    603             if ( is_admin() ) 
    604                 $where .= " OR post_status = 'future' OR post_status = 'draft'"; 
    605             else 
    606                 $distinct = 'DISTINCT'; 
    607      
    608             if ( is_user_logged_in() ) 
    609                 $where .= " OR post_author = $user_ID AND post_status = 'private'))"; 
    610             else 
    611                 $where .= '))'; 
    612         } 
    613  
    614         // Apply filters on where and join prior to paging so that any 
    615         // manipulations to them are reflected in the paging by day queries. 
    616         $where = apply_filters('posts_where', $where); 
    617         $join = apply_filters('posts_join', $join); 
    618  
    619         // Paging 
    620         if (empty($q['nopaging']) && ! $this->is_single) { 
    621             $page = $q['paged']; 
    622             if (empty($page)) { 
    623                 $page = 1; 
    624             } 
    625  
    626             if (($q['what_to_show'] == 'posts')) { 
    627                 $pgstrt = ''; 
    628                 $pgstrt = (intval($page) -1) * $q['posts_per_page'] . ', '; 
    629                 $limits = 'LIMIT '.$pgstrt.$q['posts_per_page']; 
    630             } elseif ($q['what_to_show'] == 'days') { 
    631                 $startrow = $q['posts_per_page'] * (intval($page)-1); 
    632                 $start_date = $wpdb->get_var("SELECT max(post_date) FROM $wpdb->posts $join WHERE (1=1) $where GROUP BY year(post_date), month(post_date), dayofmonth(post_date) ORDER BY post_date DESC LIMIT $startrow,1"); 
    633                 $endrow = $startrow + $q['posts_per_page'] - 1; 
    634                 $end_date = $wpdb->get_var("SELECT min(post_date) FROM $wpdb->posts $join WHERE (1=1) $where GROUP BY year(post_date), month(post_date), dayofmonth(post_date) ORDER BY post_date DESC LIMIT $endrow,1"); 
    635  
    636                 if ($page > 1) { 
    637                     $where .= " AND post_date >= '$end_date' AND post_date <= '$start_date'"; 
    638                 } else { 
    639                     $where .= " AND post_date >= '$end_date'"; 
    640                 } 
    641             } 
    642         } 
    643  
    644         // Apply post-paging filters on where and join.  Only plugins that 
    645         // manipulate paging queries should use these hooks. 
    646         $where = apply_filters('posts_where_paged', $where); 
    647         $groupby = " $wpdb->posts.ID "; 
    648         $groupby = apply_filters('posts_groupby', $groupby); 
    649         $join = apply_filters('posts_join_paged', $join); 
    650         $orderby = apply_filters('posts_orderby', $q['orderby']);  
    651         $request = " SELECT $distinct * FROM $wpdb->posts $join WHERE 1=1" . $where . " GROUP BY " . $groupby . " ORDER BY " . $orderby . " $limits"; 
    652         $this->request = apply_filters('posts_request', $request); 
    653  
    654         $this->posts = $wpdb->get_results($this->request); 
    655  
    656         // Check post status to determine if post should be displayed. 
    657         if ( !empty($this->posts) && ($this->is_single || $this->is_page) ) { 
    658             $status = get_post_status($this->posts[0]); 
    659             //$type = get_post_type($this->posts[0]); 
    660             if ( ('publish' != $status) ) { 
    661                 if ( ! is_user_logged_in() ) { 
    662                     // User must be logged in to view unpublished posts. 
    663                     $this->posts = array(); 
    664                 } else { 
    665                     if ('draft' == $status) { 
    666                         // User must have edit permissions on the draft to preview. 
    667                         if (! current_user_can('edit_post', $this->posts[0]->ID)) { 
    668                             $this->posts = array(); 
    669                         } else { 
    670                             $this->is_preview = true; 
    671                             $this->posts[0]->post_date = current_time('mysql'); 
    672                         } 
    673                     }  else if ('future' == $status) { 
    674                         $this->is_preview = true; 
    675                         if (!current_user_can('edit_post', $this->posts[0]->ID)) { 
    676                             $this->posts = array ( ); 
    677                         } 
    678                     } else { 
    679                         if (! current_user_can('read_post', $this->posts[0]->ID)) 
    680                             $this->posts = array(); 
    681                     } 
    682                 } 
    683             } 
    684         } 
    685  
    686         update_post_caches($this->posts); 
    687  
    688         $this->posts = apply_filters('the_posts', $this->posts); 
    689         $this->post_count = count($this->posts); 
    690         if ($this->post_count > 0) { 
    691             $this->post = $this->posts[0]; 
    692         } 
    693  
    694         return $this->posts; 
    695     } 
    696  
    697     function next_post() { 
    698          
    699         $this->current_post++; 
    700  
    701         $this->post = $this->posts[$this->current_post]; 
    702         return $this->post; 
    703     } 
    704  
    705     function the_post() { 
    706         global $post; 
    707         $this->in_the_loop = true; 
    708         $post = $this->next_post(); 
    709         setup_postdata($post); 
    710  
    711         if ( $this->current_post == 0 ) // loop has just started 
    712             do_action('loop_start'); 
    713     } 
    714  
    715     function have_posts() { 
    716         if ($this->current_post + 1 < $this->post_count) { 
    717             return true; 
    718         } elseif ($this->current_post + 1 == $this->post_count) { 
    719             do_action('loop_end'); 
    720             // Do some cleaning up after the loop 
    721             $this->rewind_posts(); 
    722         } 
    723  
    724         $this->in_the_loop = false; 
    725         return false; 
    726     } 
    727  
    728     function rewind_posts() { 
    729         $this->current_post = -1; 
    730         if ($this->post_count > 0) { 
    731             $this->post = $this->posts[0]; 
    732         } 
    733     } 
    734      
    735     function &query($query) { 
    736         $this->parse_query($query); 
    737         return $this->get_posts(); 
    738     } 
    739  
    740     function get_queried_object() { 
    741         if (isset($this->queried_object)) { 
    742             return $this->queried_object; 
    743         } 
    744  
    745         $this->queried_object = NULL; 
    746         $this->queried_object_id = 0; 
    747  
    748         if ($this->is_category) { 
    749             $cat = $this->get('cat'); 
    750             $category = &get_category($cat); 
    751             $this->queried_object = &$category; 
    752             $this->queried_object_id = $cat; 
    753         } else if ($this->is_single) { 
    754             $this->queried_object = $this->post; 
    755             $this->queried_object_id = $this->post->ID; 
    756         } else if ($this->is_page) { 
    757             $this->queried_object = $this->post; 
    758             $this->queried_object_id = $this->post->ID; 
    759         } else if ($this->is_author) { 
    760             $author_id = $this->get('author'); 
    761             $author = get_userdata($author_id); 
    762             $this->queried_object = $author; 
    763             $this->queried_object_id = $author_id; 
    764         } 
    765  
    766         return $this->queried_object; 
    767     } 
    768  
    769     function get_queried_object_id() { 
    770         $this->get_queried_object(); 
    771  
    772         if (isset($this->queried_object_id)) { 
    773             return $this->queried_object_id; 
    774         } 
    775  
    776         return 0; 
    777     } 
    778  
    779     function WP_Query ($query = '') { 
    780         if (! empty($query)) { 
    781             $this->query($query); 
    782         } 
    783     } 
    784 } 
    7852 
    7863class retrospam_mgr { 
  • trunk/wp-includes/functions.php

    r3638 r3639  
    14711471} 
    14721472 
    1473 function &query_posts($query) { 
    1474     global $wp_query; 
    1475     return $wp_query->query($query); 
    1476 } 
    1477  
    14781473function update_post_cache(&$posts) { 
    14791474    global $post_cache; 
     
    15821577function wp_footer() { 
    15831578    do_action('wp_footer'); 
    1584 } 
    1585  
    1586 function is_single ($post = '') { 
    1587     global $wp_query; 
    1588  
    1589     if ( !$wp_query->is_single ) 
    1590         return false; 
    1591  
    1592     if ( empty( $post) ) 
    1593         return true; 
    1594  
    1595     $post_obj = $wp_query->get_queried_object(); 
    1596  
    1597     if ( $post == $post_obj->ID ) 
    1598         return true; 
    1599     elseif ( $post == $post_obj->post_title ) 
    1600         return true; 
    1601     elseif ( $post == $post_obj->post_name ) 
    1602         return true; 
    1603  
    1604     return false; 
    1605 } 
    1606  
    1607 function is_page ($page = '') { 
    1608     global $wp_query; 
    1609  
    1610     if ( !$wp_query->is_page ) 
    1611         return false; 
    1612  
    1613     if ( empty($page) ) 
    1614         return true; 
    1615  
    1616     $page_obj = $wp_query->get_queried_object(); 
    1617  
    1618     if ( $page == $page_obj->ID ) 
    1619         return true; 
    1620     elseif ( $page == $page_obj->post_title ) 
    1621         return true; 
    1622     else if ( $page == $page_obj->post_name ) 
    1623         return true; 
    1624  
    1625     return false; 
    1626 } 
    1627  
    1628 function is_attachment () { 
    1629     global $wp_query; 
    1630  
    1631     return $wp_query->is_attachment; 
    1632 } 
    1633  
    1634 function is_preview() { 
    1635     global $wp_query; 
    1636  
    1637     return $wp_query->is_preview; 
    1638 } 
    1639  
    1640 function is_archive () { 
    1641     global $wp_query; 
    1642  
    1643     return $wp_query->is_archive; 
    1644 } 
    1645  
    1646 function is_date () { 
    1647     global $wp_query; 
    1648  
    1649     return $wp_query->is_date; 
    1650 } 
    1651  
    1652 function is_year () { 
    1653     global $wp_query; 
    1654  
    1655     return $wp_query->is_year; 
    1656 } 
    1657  
    1658 function is_month () { 
    1659     global $wp_query; 
    1660  
    1661     return $wp_query->is_month; 
    1662 } 
    1663  
    1664 function is_day () { 
    1665     global $wp_query; 
    1666  
    1667     return $wp_query->is_day; 
    1668 } 
    1669  
    1670 function is_time () { 
    1671     global $wp_query; 
    1672  
    1673     return $wp_query->is_time; 
    1674 } 
    1675  
    1676 function is_author ($author = '') { 
    1677     global $wp_query; 
    1678  
    1679     if ( !$wp_query->is_author ) 
    1680         return false; 
    1681  
    1682     if ( empty($author) ) 
    1683         return true; 
    1684  
    1685     $author_obj = $wp_query->get_queried_object(); 
    1686  
    1687     if ( $author == $author_obj->ID ) 
    1688         return true; 
    1689     elseif ( $author == $author_obj->nickname ) 
    1690         return true; 
    1691     elseif ( $author == $author_obj->user_nicename ) 
    1692         return true; 
    1693  
    1694     return false; 
    1695 } 
    1696  
    1697 function is_category ($category = '') { 
    1698     global $wp_query; 
    1699  
    1700     if ( !$wp_query->is_category ) 
    1701         return false; 
    1702  
    1703     if ( empty($category) ) 
    1704         return true; 
    1705  
    1706     $cat_obj = $wp_query->get_queried_object(); 
    1707  
    1708     if ( $category == $cat_obj->cat_ID ) 
    1709         return true; 
    1710     else if ( $category == $cat_obj->cat_name ) 
    1711         return true; 
    1712     elseif ( $category == $cat_obj->category_nicename ) 
    1713         return true; 
    1714  
    1715     return false; 
    1716 } 
    1717  
    1718 function is_search () { 
    1719     global $wp_query; 
    1720  
    1721     return $wp_query->is_search; 
    1722 } 
    1723  
    1724 function is_feed () { 
    1725     global $wp_query; 
    1726  
    1727     return $wp_query->is_feed; 
    1728 } 
    1729  
    1730 function is_trackback () { 
    1731     global $wp_query; 
    1732  
    1733     return $wp_query->is_trackback; 
    1734 } 
    1735  
    1736 function is_admin () { 
    1737     global $wp_query; 
    1738  
    1739     return ( $wp_query->is_admin || strstr($_SERVER['REQUEST_URI'], 'wp-admin/') ); 
    1740 } 
    1741  
    1742 function is_home () { 
    1743     global $wp_query; 
    1744  
    1745     return $wp_query->is_home; 
    1746 } 
    1747  
    1748 function is_404 () { 
    1749     global $wp_query; 
    1750  
    1751     return $wp_query->is_404; 
    1752 } 
    1753  
    1754 function is_comments_popup () { 
    1755     global $wp_query; 
    1756  
    1757     return $wp_query->is_comments_popup; 
    1758 } 
    1759  
    1760 function is_paged () { 
    1761     global $wp_query; 
    1762  
    1763     return $wp_query->is_paged; 
    1764 } 
    1765  
    1766 function in_the_loop() { 
    1767     global $wp_query; 
    1768  
    1769     return $wp_query->in_the_loop; 
    1770 } 
    1771  
    1772 function get_query_var($var) { 
    1773     global $wp_query; 
    1774  
    1775     return $wp_query->get($var); 
    1776 } 
    1777  
    1778 function have_posts() { 
    1779     global $wp_query; 
    1780  
    1781     return $wp_query->have_posts(); 
    1782 } 
    1783  
    1784 function rewind_posts() { 
    1785     global $wp_query; 
    1786  
    1787     return $wp_query->rewind_posts(); 
    1788 } 
    1789  
    1790 function the_post() { 
    1791     global $wp_query; 
    1792  
    1793     $wp_query->the_post(); 
    17941579} 
    17951580 
     
    21641949} 
    21651950 
    2166  
    2167 function is_plugin_page() { 
    2168     global $plugin_page; 
    2169  
    2170     if ( isset($plugin_page) ) 
    2171         return true; 
    2172  
    2173     return false; 
    2174 } 
    2175  
    21761951/* 
    21771952add_query_arg: Returns a modified querystring by adding 
  • trunk/wp-settings.php

    r3638 r3639  
    135135require (ABSPATH . WPINC . '/capabilities.php'); 
    136136require (ABSPATH . WPINC . '/classes.php'); 
     137require (ABSPATH . WPINC . '/query.php'); 
    137138require (ABSPATH . WPINC . '/template-functions-general.php'); 
    138139require (ABSPATH . WPINC . '/template-functions-links.php'); 
Note: See TracChangeset for help on using the changeset viewer.