Changeset 3639
- Timestamp:
- 03/13/2006 01:44:32 AM (19 years ago)
- Location:
- trunk
- Files:
-
- 1 added
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/wp-includes/classes.php
r3638 r3639 1 1 <?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 single110 // 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 screen219 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 variables262 $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 month312 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 else371 $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 post404 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 match421 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 stuff448 449 if ((empty($q['cat'])) || ($q['cat'] == '0') ||450 // Bypass cat checks if fetching specific posts451 ( $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 must458 // always mean 'everything /except/ this one'. We should be able to do459 // 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 URIs483 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 nicename498 if ( empty($reqcat) )499 $reqcat = get_category_by_path($q['category_name'], false);500 501 if ( !empty($reqcat) )502 $reqcat = $reqcat->cat_ID;503 else504 $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 stuff516 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 URIs540 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 slash546 } else {547 $q['author_name'] = $q['author_name'][count($q['author_name'])-2];#there was a trailling slash548 }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 by562 if (empty($q['orderby'])) {563 $q['orderby'] = 'post_date '.$q['order'];564 } else {565 // Used to filter values566 $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 safety575 $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 they588 //can edit the post, we let them through589 //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 else606 $distinct = 'DISTINCT';607 608 if ( is_user_logged_in() )609 $where .= " OR post_author = $user_ID AND post_status = 'private'))";610 else611 $where .= '))';612 }613 614 // Apply filters on where and join prior to paging so that any615 // 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 // Paging620 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 that645 // 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 started712 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 loop721 $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 }785 2 786 3 class retrospam_mgr { -
trunk/wp-includes/functions.php
r3638 r3639 1471 1471 } 1472 1472 1473 function &query_posts($query) {1474 global $wp_query;1475 return $wp_query->query($query);1476 }1477 1478 1473 function update_post_cache(&$posts) { 1479 1474 global $post_cache; … … 1582 1577 function wp_footer() { 1583 1578 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();1794 1579 } 1795 1580 … … 2164 1949 } 2165 1950 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 2176 1951 /* 2177 1952 add_query_arg: Returns a modified querystring by adding -
trunk/wp-settings.php
r3638 r3639 135 135 require (ABSPATH . WPINC . '/capabilities.php'); 136 136 require (ABSPATH . WPINC . '/classes.php'); 137 require (ABSPATH . WPINC . '/query.php'); 137 138 require (ABSPATH . WPINC . '/template-functions-general.php'); 138 139 require (ABSPATH . WPINC . '/template-functions-links.php');
Note: See TracChangeset
for help on using the changeset viewer.