X-Git-Url: https://scripts.mit.edu/gitweb/autoinstalls/wordpress.git/blobdiff_plain/449d082fcc4873c1f7d363a0d9f7409be7f6e77d..1c09677af04c9e37714e09b73eb9dbc5b2e3eb13:/wp-includes/link-template.php diff --git a/wp-includes/link-template.php b/wp-includes/link-template.php index d716a9e3..4a1787db 100644 --- a/wp-includes/link-template.php +++ b/wp-includes/link-template.php @@ -92,15 +92,18 @@ function get_permalink($id = 0, $leavename = false) { $leavename? '' : '%pagename%', ); - if ( is_object($id) && isset($id->filter) && 'sample' == $id->filter ) + if ( is_object($id) && isset($id->filter) && 'sample' == $id->filter ) { $post = $id; - else + $sample = true; + } else { $post = &get_post($id); + $sample = false; + } if ( empty($post->ID) ) return false; if ( $post->post_type == 'page' ) - return get_page_link($post->ID, $leavename); + return get_page_link($post->ID, $leavename, $sample); elseif ($post->post_type == 'attachment') return get_attachment_link($post->ID); @@ -151,7 +154,7 @@ function get_permalink($id = 0, $leavename = false) { $permalink = user_trailingslashit($permalink, 'single'); return apply_filters('post_link', $permalink, $post, $leavename); } else { // if they're not using the fancy permalink option - $permalink = get_option('home') . '/?p=' . $post->ID; + $permalink = trailingslashit(get_option('home')) . '?p=' . $post->ID; return apply_filters('post_link', $permalink, $post, $leavename); } } @@ -177,10 +180,11 @@ function post_permalink($post_id = 0, $deprecated = '') { * @since 1.5.0 * * @param int $id Optional. Post ID. - * @param bool $leavename Optional, defaults to false. Whether to keep post name or page name. + * @param bool $leavename Optional, defaults to false. Whether to keep page name. + * @param bool $sample Optional, defaults to false. Is it a sample permalink. * @return string */ -function get_page_link($id = false, $leavename = false) { +function get_page_link( $id = false, $leavename = false, $sample = false ) { global $post; $id = (int) $id; @@ -190,7 +194,7 @@ function get_page_link($id = false, $leavename = false) { if ( 'page' == get_option('show_on_front') && $id == get_option('page_on_front') ) $link = get_option('home'); else - $link = _get_page_link( $id , $leavename ); + $link = _get_page_link( $id , $leavename, $sample ); return apply_filters('page_link', $link, $id); } @@ -205,9 +209,10 @@ function get_page_link($id = false, $leavename = false) { * * @param int $id Optional. Post ID. * @param bool $leavename Optional. Leave name. + * @param bool $sample Optional. Sample permalink. * @return string */ -function _get_page_link( $id = false, $leavename = false ) { +function _get_page_link( $id = false, $leavename = false, $sample = false ) { global $post, $wp_rewrite; if ( !$id ) @@ -217,13 +222,13 @@ function _get_page_link( $id = false, $leavename = false ) { $pagestruct = $wp_rewrite->get_page_permastruct(); - if ( '' != $pagestruct && isset($post->post_status) && 'draft' != $post->post_status ) { + if ( '' != $pagestruct && ( ( isset($post->post_status) && 'draft' != $post->post_status && 'pending' != $post->post_status ) || $sample ) ) { $link = get_page_uri($id); $link = ( $leavename ) ? $pagestruct : str_replace('%pagename%', $link, $pagestruct); - $link = get_option('home') . "/$link"; + $link = trailingslashit(get_option('home')) . "$link"; $link = user_trailingslashit($link, 'page'); } else { - $link = get_option('home') . "/?page_id=$id"; + $link = trailingslashit(get_option('home')) . "?page_id=$id"; } return apply_filters( '_get_page_link', $link, $id ); @@ -264,7 +269,7 @@ function get_attachment_link($id = false) { } if (! $link ) { - $link = get_bloginfo('url') . "/?attachment_id=$id"; + $link = trailingslashit(get_bloginfo('url')) . "?attachment_id=$id"; } return apply_filters('attachment_link', $link, $id); @@ -287,7 +292,7 @@ function get_year_link($year) { $yearlink = str_replace('%year%', $year, $yearlink); return apply_filters('year_link', get_option('home') . user_trailingslashit($yearlink, 'year'), $year); } else { - return apply_filters('year_link', get_option('home') . '/?m=' . $year, $year); + return apply_filters('year_link', trailingslashit(get_option('home')) . '?m=' . $year, $year); } } @@ -312,7 +317,7 @@ function get_month_link($year, $month) { $monthlink = str_replace('%monthnum%', zeroise(intval($month), 2), $monthlink); return apply_filters('month_link', get_option('home') . user_trailingslashit($monthlink, 'month'), $year, $month); } else { - return apply_filters('month_link', get_option('home') . '/?m=' . $year . zeroise($month, 2), $year, $month); + return apply_filters('month_link', trailingslashit(get_option('home')) . '?m=' . $year . zeroise($month, 2), $year, $month); } } @@ -342,7 +347,7 @@ function get_day_link($year, $month, $day) { $daylink = str_replace('%day%', zeroise(intval($day), 2), $daylink); return apply_filters('day_link', get_option('home') . user_trailingslashit($daylink, 'day'), $year, $month, $day); } else { - return apply_filters('day_link', get_option('home') . '/?m=' . $year . zeroise($month, 2) . zeroise($day, 2), $year, $month, $day); + return apply_filters('day_link', trailingslashit(get_option('home')) . '?m=' . $year . zeroise($month, 2) . zeroise($day, 2), $year, $month, $day); } } @@ -377,7 +382,7 @@ function get_feed_link($feed = '') { if ( false !== strpos($feed, 'comments_') ) $feed = str_replace('comments_', 'comments-', $feed); - $output = get_option('home') . "/?feed={$feed}"; + $output = trailingslashit(get_option('home')) . "?feed={$feed}"; } return apply_filters('feed_link', $output, $feed); @@ -409,9 +414,9 @@ function get_post_comments_feed_link($post_id = '', $feed = '') { } else { $type = get_post_field('post_type', $post_id); if ( 'page' == $type ) - $url = get_option('home') . "/?feed=$feed&page_id=$post_id"; + $url = trailingslashit(get_option('home')) . "?feed=$feed&page_id=$post_id"; else - $url = get_option('home') . "/?feed=$feed&p=$post_id"; + $url = trailingslashit(get_option('home')) . "?feed=$feed&p=$post_id"; } return apply_filters('post_comments_feed_link', $url); @@ -438,7 +443,7 @@ function post_comments_feed_link( $link_text = '', $post_id = '', $feed = '' ) { if ( empty($link_text) ) $link_text = __('Comments Feed'); - echo "$link_text"; + echo apply_filters( 'post_comments_feed_link_html', "$link_text", $post_id, $feed ); } /** @@ -463,7 +468,7 @@ function get_author_feed_link( $author_id, $feed = '' ) { $feed = get_default_feed(); if ( '' == $permalink_structure ) { - $link = get_option('home') . "?feed=$feed&author=" . $author_id; + $link = trailingslashit(get_option('home')) . "?feed=$feed&author=" . $author_id; } else { $link = get_author_posts_url($author_id); if ( $feed == get_default_feed() ) @@ -507,7 +512,7 @@ function get_category_feed_link($cat_id, $feed = '') { $permalink_structure = get_option('permalink_structure'); if ( '' == $permalink_structure ) { - $link = get_option('home') . "?feed=$feed&cat=" . $cat_id; + $link = trailingslashit(get_option('home')) . "?feed=$feed&cat=" . $cat_id; } else { $link = get_category_link($cat_id); if( $feed == get_default_feed() ) @@ -546,7 +551,7 @@ function get_tag_feed_link($tag_id, $feed = '') { $feed = get_default_feed(); if ( '' == $permalink_structure ) { - $link = get_option('home') . "?feed=$feed&tag=" . $tag->slug; + $link = trailingslashit(get_option('home')) . "?feed=$feed&tag=" . $tag->slug; } else { $link = get_tag_link($tag->term_id); if ( $feed == get_default_feed() ) @@ -569,13 +574,13 @@ function get_tag_feed_link($tag_id, $feed = '') { * @param int $tag_id Tag ID * @return string */ -function get_edit_tag_link( $tag_id = 0 ) { - $tag = get_term($tag_id, 'post_tag'); +function get_edit_tag_link( $tag_id = 0, $taxonomy = 'post_tag' ) { + $tag = get_term($tag_id, $taxonomy); if ( !current_user_can('manage_categories') ) return; - $location = admin_url('edit-tags.php?action=edit&tag_ID=') . $tag->term_id; + $location = admin_url('edit-tags.php?action=edit&taxonomy=' . $taxonomy . '&tag_ID=' . $tag->term_id); return apply_filters( 'get_edit_tag_link', $location ); } @@ -614,14 +619,14 @@ function edit_tag_link( $link = '', $before = '', $after = '', $tag = null ) { */ function get_search_feed_link($search_query = '', $feed = '') { if ( empty($search_query) ) - $search = attribute_escape(get_search_query()); + $search = esc_attr( urlencode(get_search_query()) ); else - $search = attribute_escape(stripslashes($search_query)); + $search = esc_attr( urlencode(stripslashes($search_query)) ); if ( empty($feed) ) $feed = get_default_feed(); - $link = get_option('home') . "?s=$search&feed=$feed"; + $link = trailingslashit(get_option('home')) . "?s=$search&feed=$feed"; $link = apply_filters('search_feed_link', $link); @@ -639,14 +644,14 @@ function get_search_feed_link($search_query = '', $feed = '') { */ function get_search_comments_feed_link($search_query = '', $feed = '') { if ( empty($search_query) ) - $search = attribute_escape(get_search_query()); + $search = esc_attr( urlencode(get_search_query()) ); else - $search = attribute_escape(stripslashes($search_query)); + $search = esc_attr( urlencode(stripslashes($search_query)) ); if ( empty($feed) ) $feed = get_default_feed(); - $link = get_option('home') . "?s=$search&feed=comments-$feed"; + $link = trailingslashit(get_option('home')) . "?s=$search&feed=comments-$feed"; $link = apply_filters('search_feed_link', $link); @@ -696,7 +701,7 @@ function get_edit_post_link( $id = 0, $context = 'display' ) { break; default : if ( !current_user_can( 'edit_post', $post->ID ) ) - return; + return apply_filters( 'get_edit_post_link', '', $post->ID, $context );; $file = 'post'; $var = 'post'; break; @@ -706,27 +711,79 @@ function get_edit_post_link( $id = 0, $context = 'display' ) { } /** - * Retrieve edit posts link for post. + * Display edit post link for post. * * @since 1.0.0 * * @param string $link Optional. Anchor text. * @param string $before Optional. Display before edit link. * @param string $after Optional. Display after edit link. + * @param int $id Optional. Post ID. */ -function edit_post_link( $link = 'Edit This', $before = '', $after = '' ) { - global $post; +function edit_post_link( $link = null, $before = '', $after = '', $id = 0 ) { + if ( !$post = &get_post( $id ) ) + return; - if ( $post->post_type == 'page' ) { - if ( !current_user_can( 'edit_page', $post->ID ) ) + if ( !$url = get_edit_post_link( $post->ID ) ) + return; + + if ( null === $link ) + $link = __('Edit This'); + + $link = '' . $link . ''; + echo $before . apply_filters( 'edit_post_link', $link, $post->ID ) . $after; +} + +/** + * Retrieve delete posts link for post. + * + * Can be used within the WordPress loop or outside of it. Can be used with + * pages, posts, attachments, and revisions. + * + * @since 2.9.0 + * + * @param int $id Optional. Post ID. + * @param string $context Optional, default to display. How to write the '&', defaults to '&'. + * @return string + */ +function get_delete_post_link($id = 0, $context = 'display') { + if ( !$post = &get_post( $id ) ) + return; + + if ( 'display' == $context ) + $action = 'action=trash&'; + else + $action = 'action=trash&'; + + switch ( $post->post_type ) : + case 'page' : + if ( !current_user_can( 'delete_page', $post->ID ) ) return; - } else { - if ( !current_user_can( 'edit_post', $post->ID ) ) + $file = 'page'; + $var = 'post'; + break; + case 'attachment' : + if ( !current_user_can( 'delete_post', $post->ID ) ) return; - } + $file = 'media'; + $var = 'attachment_id'; + break; + case 'revision' : + if ( !current_user_can( 'delete_post', $post->ID ) ) + return; + $file = 'revision'; + $var = 'revision'; + $action = ''; + break; + default : + if ( !current_user_can( 'edit_post', $post->ID ) ) + return apply_filters( 'get_delete_post_link', '', $post->ID, $context );; + $file = 'post'; + $var = 'post'; + break; + endswitch; - $link = '' . $link . ''; - echo $before . apply_filters( 'edit_post_link', $link, $post->ID ) . $after; + return apply_filters( 'get_delete_post_link', wp_nonce_url( admin_url("$file.php?{$action}$var=$post->ID"), "trash-{$file}_" . $post->ID ), $context ); } /** @@ -763,11 +820,10 @@ function get_edit_comment_link( $comment_id = 0 ) { * @param string $after Optional. Display after edit link. * @return string|null HTML content, if $echo is set to false. */ -function edit_comment_link( $link = 'Edit This', $before = '', $after = '' ) { +function edit_comment_link( $link = null, $before = '', $after = '' ) { global $comment, $post; - if ( $post->post_type == 'attachment' ) { - } elseif ( $post->post_type == 'page' ) { + if ( $post->post_type == 'page' ) { if ( !current_user_can( 'edit_page', $post->ID ) ) return; } else { @@ -775,6 +831,9 @@ function edit_comment_link( $link = 'Edit This', $before = '', $after = '' ) { return; } + if ( null === $link ) + $link = __('Edit This'); + $link = '' . $link . ''; echo $before . apply_filters( 'edit_comment_link', $link, $comment->comment_ID ) . $after; } @@ -863,7 +922,7 @@ function get_next_post($in_same_cat = false, $excluded_categories = '') { function get_adjacent_post($in_same_cat = false, $excluded_categories = '', $previous = true) { global $post, $wpdb; - if( empty($post) || !is_single() || is_attachment() ) + if ( empty($post) || !is_single() || is_attachment() ) return null; $current_post_date = $post->post_date; @@ -897,10 +956,255 @@ function get_adjacent_post($in_same_cat = false, $excluded_categories = '', $pre $order = $previous ? 'DESC' : 'ASC'; $join = apply_filters( "get_{$adjacent}_post_join", $join, $in_same_cat, $excluded_categories ); - $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 ); + $where = apply_filters( "get_{$adjacent}_post_where", $wpdb->prepare("WHERE p.post_date $op %s AND p.post_type = %s AND p.post_status = 'publish' $posts_in_ex_cats_sql", $current_post_date, $post->post_type), $in_same_cat, $excluded_categories ); $sort = apply_filters( "get_{$adjacent}_post_sort", "ORDER BY p.post_date $order LIMIT 1" ); - return $wpdb->get_row("SELECT p.* FROM $wpdb->posts AS p $join $where $sort"); + $query = "SELECT p.* FROM $wpdb->posts AS p $join $where $sort"; + $query_key = 'adjacent_post_' . md5($query); + $result = wp_cache_get($query_key, 'counts'); + if ( false !== $result ) + return $result; + + $result = $wpdb->get_row("SELECT p.* FROM $wpdb->posts AS p $join $where $sort"); + if ( null === $result ) + $result = ''; + + wp_cache_set($query_key, $result, 'counts'); + return $result; +} + +/** + * Get adjacent post relational link. + * + * Can either be next or previous post relational link. + * + * @since 2.8.0 + * + * @param string $title Optional. Link title format. + * @param bool $in_same_cat Optional. Whether link should be in same category. + * @param string $excluded_categories Optional. Excluded categories IDs. + * @param bool $previous Optional, default is true. Whether display link to previous post. + * @return string + */ +function get_adjacent_post_rel_link($title = '%title', $in_same_cat = false, $excluded_categories = '', $previous = true) { + if ( $previous && is_attachment() ) + $post = & get_post($GLOBALS['post']->post_parent); + else + $post = get_adjacent_post($in_same_cat,$excluded_categories,$previous); + + if ( empty($post) ) + return; + + if ( empty($post->post_title) ) + $post->post_title = $previous ? __('Previous Post') : __('Next Post'); + + $date = mysql2date(get_option('date_format'), $post->post_date); + + $title = str_replace('%title', $post->post_title, $title); + $title = str_replace('%date', $date, $title); + $title = apply_filters('the_title', $title, $post); + + $link = $previous ? "\n"; + + $adjacent = $previous ? 'previous' : 'next'; + return apply_filters( "{$adjacent}_post_rel_link", $link ); +} + +/** + * Display relational links for the posts adjacent to the current post. + * + * @since 2.8.0 + * + * @param string $title Optional. Link title format. + * @param bool $in_same_cat Optional. Whether link should be in same category. + * @param string $excluded_categories Optional. Excluded categories IDs. + */ +function adjacent_posts_rel_link($title = '%title', $in_same_cat = false, $excluded_categories = '') { + echo get_adjacent_post_rel_link($title, $in_same_cat, $excluded_categories = '', true); + echo get_adjacent_post_rel_link($title, $in_same_cat, $excluded_categories = '', false); +} + +/** + * Display relational link for the next post adjacent to the current post. + * + * @since 2.8.0 + * + * @param string $title Optional. Link title format. + * @param bool $in_same_cat Optional. Whether link should be in same category. + * @param string $excluded_categories Optional. Excluded categories IDs. + */ +function next_post_rel_link($title = '%title', $in_same_cat = false, $excluded_categories = '') { + echo get_adjacent_post_rel_link($title, $in_same_cat, $excluded_categories = '', false); +} + +/** + * Display relational link for the previous post adjacent to the current post. + * + * @since 2.8.0 + * + * @param string $title Optional. Link title format. + * @param bool $in_same_cat Optional. Whether link should be in same category. + * @param string $excluded_categories Optional. Excluded categories IDs. + */ +function prev_post_rel_link($title = '%title', $in_same_cat = false, $excluded_categories = '') { + echo get_adjacent_post_rel_link($title, $in_same_cat, $excluded_categories = '', true); +} + +/** + * Retrieve boundary post. + * + * Boundary being either the first or last post by publish date within the contraitns specified + * by in same category or excluded categories. + * + * @since 2.8.0 + * + * @param bool $in_same_cat Optional. Whether returned post should be in same category. + * @param string $excluded_categories Optional. Excluded categories IDs. + * @param bool $previous Optional. Whether to retrieve first post. + * @return object + */ +function get_boundary_post($in_same_cat = false, $excluded_categories = '', $start = true) { + global $post, $wpdb; + + if ( empty($post) || !is_single() || is_attachment() ) + return null; + + $cat_array = array(); + $excluded_categories = array(); + if ( !empty($in_same_cat) || !empty($excluded_categories) ) { + if ( !empty($in_same_cat) ) { + $cat_array = wp_get_object_terms($post->ID, 'category', 'fields=ids'); + } + + if ( !empty($excluded_categories) ) { + $excluded_categories = array_map('intval', explode(',', $excluded_categories)); + + if ( !empty($cat_array) ) + $excluded_categories = array_diff($excluded_categories, $cat_array); + + $inverse_cats = array(); + foreach ( $excluded_categories as $excluded_category) + $inverse_cats[] = $excluded_category * -1; + $excluded_categories = $inverse_cats; + } + } + + $categories = implode(',', array_merge($cat_array, $excluded_categories) ); + + $order = $start ? 'ASC' : 'DESC'; + + return get_posts( array('numberposts' => 1, 'order' => $order, 'orderby' => 'ID', 'category' => $categories) ); +} + +/** + * Get boundary post relational link. + * + * Can either be start or end post relational link. + * + * @since 2.8.0 + * + * @param string $title Optional. Link title format. + * @param bool $in_same_cat Optional. Whether link should be in same category. + * @param string $excluded_categories Optional. Excluded categories IDs. + * @param bool $start Optional, default is true. Whether display link to first post. + * @return string + */ +function get_boundary_post_rel_link($title = '%title', $in_same_cat = false, $excluded_categories = '', $start = true) { + $posts = get_boundary_post($in_same_cat,$excluded_categories,$start); + // Even though we limited get_posts to return only 1 item it still returns an array of objects. + $post = $posts[0]; + + if ( empty($post) ) + return; + + if ( empty($post->post_title) ) + $post->post_title = $start ? __('First Post') : __('Last Post'); + + $date = mysql2date(get_option('date_format'), $post->post_date); + + $title = str_replace('%title', $post->post_title, $title); + $title = str_replace('%date', $date, $title); + $title = apply_filters('the_title', $title, $post); + + $link = $start ? "\n"; + + $boundary = $start ? 'start' : 'end'; + return apply_filters( "{$boundary}_post_rel_link", $link ); +} + +/** + * Display relational link for the first post. + * + * @since 2.8.0 + * + * @param string $title Optional. Link title format. + * @param bool $in_same_cat Optional. Whether link should be in same category. + * @param string $excluded_categories Optional. Excluded categories IDs. + */ +function start_post_rel_link($title = '%title', $in_same_cat = false, $excluded_categories = '') { + echo get_boundary_post_rel_link($title, $in_same_cat, $excluded_categories, true); +} + +/** + * Get site index relational link. + * + * @since 2.8.0 + * + * @return string + */ +function get_index_rel_link() { + $link = "\n"; + return apply_filters( "index_rel_link", $link ); +} + +/** + * Display relational link for the site index. + * + * @since 2.8.0 + */ +function index_rel_link() { + echo get_index_rel_link(); +} + +/** + * Get parent post relational link. + * + * @since 2.8.0 + * + * @param string $title Optional. Link title format. + * @return string + */ +function get_parent_post_rel_link($title = '%title') { + if ( ! empty( $GLOBALS['post'] ) && ! empty( $GLOBALS['post']->post_parent ) ) + $post = & get_post($GLOBALS['post']->post_parent); + + if ( empty($post) ) + return; + + $date = mysql2date(get_option('date_format'), $post->post_date); + + $title = str_replace('%title', $post->post_title, $title); + $title = str_replace('%date', $date, $title); + $title = apply_filters('the_title', $title, $post); + + $link = "\n"; + + return apply_filters( "parent_post_rel_link", $link ); +} + +/** + * Display relational link for parent item + * + * @since 2.8.0 + */ +function parent_post_rel_link($title = '%title') { + echo get_parent_post_rel_link($title); } /** @@ -960,8 +1264,9 @@ function adjacent_post_link($format, $link, $in_same_cat = false, $excluded_cate $title = apply_filters('the_title', $title, $post); $date = mysql2date(get_option('date_format'), $post->post_date); + $rel = $previous ? 'prev' : 'next'; - $string = ''; + $string = ''; $link = str_replace('%title', $title, $link); $link = str_replace('%date', $date, $link); $link = $string . $link . ''; @@ -1065,7 +1370,7 @@ function get_next_posts_page_link($max_page = 0) { * @param boolean $echo Optional. Echo or return; */ function next_posts( $max_page = 0, $echo = true ) { - $output = clean_url( get_next_posts_page_link( $max_page ) ); + $output = esc_url( get_next_posts_page_link( $max_page ) ); if ( $echo ) echo $output; @@ -1143,7 +1448,7 @@ function get_previous_posts_page_link() { * @param boolean $echo Optional. Echo or return; */ function previous_posts( $echo = true ) { - $output = clean_url( get_previous_posts_page_link() ); + $output = esc_url( get_previous_posts_page_link() ); if ( $echo ) echo $output; @@ -1181,31 +1486,56 @@ function previous_posts_link( $label = '« Previous Page' ) { } /** - * Display post pages link navigation for previous and next pages. + * Return post pages link navigation for previous and next pages. * - * @since 0.71 + * @since 2.8 * - * @param string $sep Optional. Separator for posts navigation links. - * @param string $prelabel Optional. Label for previous pages. - * @param string $nxtlabel Optional Label for next pages. + * @param string|array $args Optional args. + * @return string The posts link navigation. */ -function posts_nav_link( $sep = ' — ', $prelabel = '« Previous Page', $nxtlabel = 'Next Page »' ) { +function get_posts_nav_link( $args = array() ) { global $wp_query; + + $return = ''; + if ( !is_singular() ) { + $defaults = array( + 'sep' => ' — ', + 'prelabel' => __('« Previous Page'), + 'nxtlabel' => __('Next Page »'), + ); + $args = wp_parse_args( $args, $defaults ); + $max_num_pages = $wp_query->max_num_pages; $paged = get_query_var('paged'); //only have sep if there's both prev and next results if ($paged < 2 || $paged >= $max_num_pages) { - $sep = ''; + $args['sep'] = ''; } if ( $max_num_pages > 1 ) { - previous_posts_link($prelabel); - echo preg_replace('/&([^#])(?![a-z]{1,8};)/', '&$1', $sep); - next_posts_link($nxtlabel); + $return = get_previous_posts_link($args['prelabel']); + $return .= preg_replace('/&([^#])(?![a-z]{1,8};)/', '&$1', $args['sep']); + $return .= get_next_posts_link($args['nxtlabel']); } } + return $return; + +} + +/** + * Display post pages link navigation for previous and next pages. + * + * @since 0.71 + * + * @param string $sep Optional. Separator for posts navigation links. + * @param string $prelabel Optional. Label for previous pages. + * @param string $nxtlabel Optional Label for next pages. + */ +function posts_nav_link( $sep = '', $prelabel = '', $nxtlabel = '' ) { + $args = array_filter( compact('sep', 'prelabel', 'nxtlabel') ); + echo get_posts_nav_link($args); } /** @@ -1256,7 +1586,7 @@ function get_comments_pagenum_link( $pagenum = 1, $max_page = 0 ) { function get_next_comments_link( $label = '', $max_page = 0 ) { global $wp_query; - if ( !is_singular() ) + if ( !is_singular() || !get_option('page_comments') ) return; $page = get_query_var('cpage'); @@ -1275,7 +1605,7 @@ function get_next_comments_link( $label = '', $max_page = 0 ) { if ( empty($label) ) $label = __('Newer Comments »'); - return ''. preg_replace('/&([^#])(?![a-z]{1,8};)/', '&$1', $label) .''; + return ''. preg_replace('/&([^#])(?![a-z]{1,8};)/', '&$1', $label) .''; } /** @@ -1299,7 +1629,7 @@ function next_comments_link( $label = '', $max_page = 0 ) { * @return string|null */ function get_previous_comments_link( $label = '' ) { - if ( !is_singular() ) + if ( !is_singular() || !get_option('page_comments') ) return; $page = get_query_var('cpage'); @@ -1312,7 +1642,7 @@ function get_previous_comments_link( $label = '' ) { if ( empty($label) ) $label = __('« Older Comments'); - return '' . preg_replace('/&([^#])(?![a-z]{1,8};)/', '&$1', $label) .''; + return '' . preg_replace('/&([^#])(?![a-z]{1,8};)/', '&$1', $label) .''; } /** @@ -1338,7 +1668,7 @@ function previous_comments_link( $label = '' ) { function paginate_comments_links($args = array()) { global $wp_query, $wp_rewrite; - if ( !is_singular() ) + if ( !is_singular() || !get_option('page_comments') ) return; $page = get_query_var('cpage'); @@ -1385,18 +1715,10 @@ function get_shortcut_link() { f='" . admin_url('press-this.php') . "', l=d.location, e=encodeURIComponent, - g=f+'?u='+e(l.href)+'&t='+e(d.title)+'&s='+e(s)+'&v=2'; - function a(){ - if(!w.open(g,'t','toolbar=0,resizable=0,scrollbars=1,status=1,width=720,height=570')){ - l.href=g; - } - }"; - if (strpos($_SERVER['HTTP_USER_AGENT'], 'Firefox') !== false) - $link .= 'setTimeout(a,0);'; - else - $link .= 'a();'; - - $link .= "void(0);"; + u=f+'?u='+e(l.href)+'&t='+e(d.title)+'&s='+e(s)+'&v=4'; + a=function(){if(!w.open(u,'t','toolbar=0,resizable=1,scrollbars=1,status=1,width=720,height=570'))l.href=u;}; + if (/Firefox/.test(navigator.userAgent)) setTimeout(a, 0); else a(); + void(0)"; $link = str_replace(array("\r", "\n", "\t"), '', $link); @@ -1421,7 +1743,7 @@ function site_url($path = '', $scheme = null) { // should the list of allowed schemes be maintained elsewhere? $orig_scheme = $scheme; if ( !in_array($scheme, array('http', 'https')) ) { - if ( ('login_post' == $scheme) && ( force_ssl_login() || force_ssl_admin() ) ) + if ( ( 'login_post' == $scheme || 'rpc' == $scheme ) && ( force_ssl_login() || force_ssl_admin() ) ) $scheme = 'https'; elseif ( ('login' == $scheme) && ( force_ssl_admin() ) ) $scheme = 'https'; @@ -1454,7 +1776,7 @@ function admin_url($path = '') { if ( !empty($path) && is_string($path) && strpos($path, '..') === false ) $url .= ltrim($path, '/'); - return $url; + return apply_filters('admin_url', $url, $path); } /** @@ -1472,7 +1794,7 @@ function includes_url($path = '') { if ( !empty($path) && is_string($path) && strpos($path, '..') === false ) $url .= ltrim($path, '/'); - return $url; + return apply_filters('includes_url', $url, $path); } /** @@ -1495,30 +1817,62 @@ function content_url($path = '') { if ( !empty($path) && is_string($path) && strpos($path, '..') === false ) $url .= '/' . ltrim($path, '/'); - return $url; + return apply_filters('content_url', $url, $path); } /** - * Retrieve the url to the plugins directory. + * Retrieve the url to the plugins directory or to a specific file within that directory. + * You can hardcode the plugin slug in $path or pass __FILE__ as a second argument to get the correct folder name. * * @package WordPress * @since 2.6.0 * * @param string $path Optional. Path relative to the plugins url. + * @param string $plugin Optional. The plugin file that you want to be relative to - i.e. pass in __FILE__ * @return string Plugins url link with optional path appended. */ -function plugins_url($path = '') { +function plugins_url($path = '', $plugin = '') { $scheme = ( is_ssl() ? 'https' : 'http' ); - $url = WP_PLUGIN_URL; + + if ( $plugin !== '' && preg_match('#^' . preg_quote(WPMU_PLUGIN_DIR . DIRECTORY_SEPARATOR, '#') . '#', $plugin) ) { + $url = WPMU_PLUGIN_URL; + } else { + $url = WP_PLUGIN_URL; + } + if ( 0 === strpos($url, 'http') ) { if ( is_ssl() ) $url = str_replace( 'http://', "{$scheme}://", $url ); } + if ( !empty($plugin) && is_string($plugin) ) { + $folder = dirname(plugin_basename($plugin)); + if ('.' != $folder) + $url .= '/' . ltrim($folder, '/'); + } + if ( !empty($path) && is_string($path) && strpos($path, '..') === false ) $url .= '/' . ltrim($path, '/'); - return $url; + return apply_filters('plugins_url', $url, $path, $plugin); +} + +/** + * Output rel=canonical for singular queries + * + * @package WordPress + * @since 2.9.0 +*/ +function rel_canonical() { + if ( !is_singular() ) + return; + + global $wp_the_query; + if ( !$id = $wp_the_query->get_queried_object_id() ) + return; + + $link = get_permalink( $id ); + echo "\n"; } ?>