Changeset 6359
- Timestamp:
- 12/05/2007 09:25:45 AM (17 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/wp-includes/link-template.php
r6352 r6359 361 361 362 362 function get_previous_post($in_same_cat = false, $excluded_categories = '') { 363 return get_adjacent_post($in_same_cat, $excluded_categories); 364 } 365 366 function get_next_post($in_same_cat = false, $excluded_categories = '') { 367 return get_adjacent_post($in_same_cat, $excluded_categories, false); 368 } 369 370 function get_adjacent_post($in_same_cat = false, $excluded_categories = '', $previous = true) { 363 371 global $post, $wpdb; 364 372 … … 369 377 370 378 $join = ''; 371 if ( $in_same_cat ) { 372 $join = " INNER JOIN $wpdb->term_relationships AS tr ON p.ID = tr.object_id "; 373 $cat_array = wp_get_object_terms($post->ID, 'category', 'fields=tt_ids'); 374 $join .= $wpdb->prepare(' AND (tr.term_taxonomy_id = %d', $cat_array[0]); 375 for ( $i = 1; $i < (count($cat_array)); $i++ ) { 376 $join .= $wpdb->prepare(' OR tr.term_taxonomy_id = %d', $cat_array[$i]); 377 } 378 $join .= ')'; 379 } 380 381 $sql_exclude_cats = ''; 382 if ( !empty($excluded_categories) ) { 383 $blah = explode(' and ', $excluded_categories); 384 $posts_in_ex_cats = get_objects_in_term($blah, 'category'); 385 $posts_in_ex_cats_sql = 'AND p.ID NOT IN (' . implode($posts_in_ex_cats, ',') . ')'; 386 } 387 388 $join = apply_filters( 'get_previous_post_join', $join, $in_same_cat, $excluded_categories ); 389 $where = apply_filters( 'get_previous_post_where', $wpdb->prepare("WHERE p.post_date < %s AND p.post_type = 'post' AND p.post_status = 'publish' $posts_in_ex_cats_sql", $current_post_date), $in_same_cat, $excluded_categories ); 390 $sort = apply_filters( 'get_previous_post_sort', 'ORDER BY p.post_date DESC LIMIT 1' ); 391 392 return @$wpdb->get_row("SELECT p.ID, p.post_title FROM $wpdb->posts AS p $join $where $sort"); 393 } 394 395 function get_next_post($in_same_cat = false, $excluded_categories = '') { 396 global $post, $wpdb; 397 398 if( empty($post) || !is_single() || is_attachment() ) 399 return null; 400 401 $current_post_date = $post->post_date; 402 403 $join = ''; 404 if ( $in_same_cat ) { 405 $join = " INNER JOIN $wpdb->term_relationships AS tr ON p.ID = tr.object_id "; 406 $cat_array = wp_get_object_terms($post->ID, 'category', 'fields=tt_ids'); 407 $join .= $wpdb->prepare(' AND (tr.term_taxonomy_id = %d', $cat_array[0]); 408 for ( $i = 1; $i < (count($cat_array)); $i++ ) { 409 $join .= $wpdb->prepare(' OR tr.term_taxonomy_id = $d', $cat_array[$i]); 410 } 411 $join .= ')'; 412 } 413 414 $sql_exclude_cats = ''; 415 if ( !empty($excluded_categories) ) { 416 $blah = explode(' and ', $excluded_categories); 417 $posts_in_ex_cats = get_objects_in_term($blah, 'category'); 418 $posts_in_ex_cats_sql = 'AND p.ID NOT IN (' . implode($posts_in_ex_cats, ',') . ')'; 419 } 420 421 $join = apply_filters( 'get_next_post_join', $join, $in_same_cat, $excluded_categories ); 422 $where = apply_filters( 'get_next_post_where', $wpdb->prepare("WHERE p.post_date > %s AND p.post_type = 'post' AND p.post_status = 'publish' $posts_in_ex_cats_sql AND p.ID != %d", $current_post_date, $post->ID), $in_same_cat, $excluded_categories ); 423 $sort = apply_filters( 'get_next_post_sort', 'ORDER BY p.post_date ASC LIMIT 1' ); 424 425 return @$wpdb->get_row("SELECT p.ID, p.post_title FROM $wpdb->posts AS p $join $where $sort"); 426 } 427 379 if ( $in_same_cat || !empty($excluded_categories) ) { 380 $join = " INNER JOIN $wpdb->term_relationships AS tr ON p.ID = tr.object_id INNER JOIN $wpdb->term_taxonomy tt ON tr.term_taxonomy_id = tt.term_taxonomy_id"; 381 382 if ( $in_same_cat ) { 383 $cat_array = wp_get_object_terms($post->ID, 'category', 'fields=ids'); 384 $join .= " AND tt.taxonomy = 'category' AND tt.term_id IN (" . implode($cat_array, ',') . ')'; 385 } 386 387 $posts_in_ex_cats_sql = "AND tt.taxonomy = 'category'"; 388 if ( !empty($excluded_categories) ) { 389 $excluded_categories = array_map('intval', explode(' and ', $excluded_categories)); 390 if ( !empty($cat_array) ) { 391 $excluded_categories = array_diff($excluded_categories, $cat_array); 392 $posts_in_ex_cats_sql = ''; 393 } 394 395 if ( !empty($excluded_categories) ) { 396 $posts_in_ex_cats_sql = " AND tt.term_id NOT IN (" . implode($excluded_categories, ',') . ')'; 397 } 398 } 399 } 400 401 $adjacent = $previous ? 'previous' : 'next'; 402 $op = $previous ? '<' : '>'; 403 $order = $previous ? 'DESC' : 'ASC'; 404 405 $join = apply_filters( "get_{$adjacent}_post_join", $join, $in_same_cat, $excluded_categories ); 406 $where = apply_filters( "get_{$adjacent}_post_where", $wpdb->prepare("WHERE p.post_date $op %s AND p.post_type = 'post' AND p.post_status = 'publish' $posts_in_ex_cats_sql", $current_post_date), $in_same_cat, $excluded_categories ); 407 $sort = apply_filters( "get_{$adjacent}_post_sort", "ORDER BY p.post_date $order LIMIT 1" ); 408 409 return $wpdb->get_row("SELECT p.* FROM $wpdb->posts AS p $join $where $sort"); 410 } 428 411 429 412 function previous_post_link($format='« %link', $link='%title', $in_same_cat = false, $excluded_categories = '') { 430 431 if ( is_attachment() ) 413 adjacent_post_link($format, $link, $in_same_cat, $excluded_categories, true); 414 } 415 416 function next_post_link($format='%link »', $link='%title', $in_same_cat = false, $excluded_categories = '') { 417 adjacent_post_link($format, $link, $in_same_cat, $excluded_categories, false); 418 } 419 420 function adjacent_post_link($format, $link, $in_same_cat = false, $excluded_categories = '', $previous = true) { 421 if ( $previous && is_attachment() ) 432 422 $post = & get_post($GLOBALS['post']->post_parent); 433 423 else 434 $post = get_ previous_post($in_same_cat, $excluded_categories);424 $post = get_adjacent_post($in_same_cat, $excluded_categories, $previous); 435 425 436 426 if ( !$post ) … … 440 430 441 431 if ( empty($post->post_title) ) 442 $title = __('PreviousPost');432 $title = $previous ? __('Previous Post') : __('Next Post'); 443 433 444 434 $title = apply_filters('the_title', $title, $post); 445 $string = '<a href="'.get_permalink($post->ID).'">'; 446 $link = str_replace('%title', $title, $link); 447 $link = $pre . $string . $link . '</a>'; 448 449 $format = str_replace('%link', $link, $format); 450 451 echo $format; 452 } 453 454 function next_post_link($format='%link »', $link='%title', $in_same_cat = false, $excluded_categories = '') { 455 $post = get_next_post($in_same_cat, $excluded_categories); 456 457 if ( !$post ) 458 return; 459 460 $title = $post->post_title; 461 462 if ( empty($post->post_title) ) 463 $title = __('Next Post'); 464 465 $title = apply_filters('the_title', $title, $post); 466 $string = '<a href="'.get_permalink($post->ID).'">'; 435 $string = '<a href="'.get_permalink($post).'">'; 467 436 $link = str_replace('%title', $title, $link); 468 437 $link = $string . $link . '</a>'; 438 469 439 $format = str_replace('%link', $link, $format); 470 440
Note: See TracChangeset
for help on using the changeset viewer.