X-Git-Url: https://scripts.mit.edu/gitweb/autoinstalls/wordpress.git/blobdiff_plain/11be15bd505d66a91e2c80062190b13e315a04a9..cc5aa27dd564435b195ea084fa46b3069e78bbff:/wp-includes/link-template.php diff --git a/wp-includes/link-template.php b/wp-includes/link-template.php index f52f8ea2..38a0ab6e 100644 --- a/wp-includes/link-template.php +++ b/wp-includes/link-template.php @@ -73,9 +73,9 @@ function permalink_anchor( $mode = 'id' ) { * * @since 1.0.0 * - * @param int $id Optional. Post ID. - * @param bool $leavename Optional, defaults to false. Whether to keep post name or page name. - * @return string + * @param int|WP_Post $id Optional. Post ID or post object, defaults to the current post. + * @param bool $leavename Optional. Whether to keep post name or page name, defaults to false. + * @return string|bool The permalink URL or false if post does not exist. */ function get_permalink( $id = 0, $leavename = false ) { $rewritecode = array( @@ -131,7 +131,7 @@ function get_permalink( $id = 0, $leavename = false ) { // show default category in permalinks, without // having to assign it explicitly if ( empty($category) ) { - $default_category = get_category( get_option( 'default_category' ) ); + $default_category = get_term( get_option( 'default_category' ), 'category' ); $category = is_wp_error( $default_category ) ? '' : $default_category->slug; } } @@ -662,11 +662,11 @@ function get_edit_tag_link( $tag_id, $taxonomy = 'post_tag' ) { * @param string $link Optional. Anchor text. * @param string $before Optional. Display before edit link. * @param string $after Optional. Display after edit link. - * @param int|object $tag Tag object or ID + * @param object $tag Tag object. * @return string HTML content. */ function edit_tag_link( $link = '', $before = '', $after = '', $tag = null ) { - $link = edit_term_link( $link, '', '', false, $tag ); + $link = edit_term_link( $link, '', '', $tag, false ); echo $before . apply_filters( 'edit_tag_link', $link ) . $after; } @@ -709,22 +709,24 @@ function get_edit_term_link( $term_id, $taxonomy, $object_type = '' ) { * @param string $link Optional. Anchor text. * @param string $before Optional. Display before edit link. * @param string $after Optional. Display after edit link. - * @param object $term Term object + * @param object $term Term object. * @return string HTML content. */ function edit_term_link( $link = '', $before = '', $after = '', $term = null, $echo = true ) { - if ( is_null( $term ) ) { + if ( is_null( $term ) ) $term = get_queried_object(); - } + + if ( ! $term ) + return; $tax = get_taxonomy( $term->taxonomy ); - if ( !current_user_can($tax->cap->edit_terms) ) + if ( ! current_user_can( $tax->cap->edit_terms ) ) return; if ( empty( $link ) ) $link = __('Edit This'); - $link = '' . $link . ''; + $link = '' . $link . ''; $link = $before . apply_filters( 'edit_term_link', $link, $term->term_id ) . $after; if ( $echo ) @@ -935,7 +937,7 @@ function edit_post_link( $link = null, $before = '', $after = '', $id = 0 ) { $link = __('Edit This'); $post_type_obj = get_post_type_object( $post->post_type ); - $link = '' . $link . ''; + $link = '' . $link . ''; echo $before . apply_filters( 'edit_post_link', $link, $post->ID ) . $after; } @@ -1009,7 +1011,7 @@ function edit_comment_link( $link = null, $before = '', $after = '' ) { if ( null === $link ) $link = __('Edit This'); - $link = '' . $link . ''; + $link = '' . $link . ''; echo $before . apply_filters( 'edit_comment_link', $link, $comment->comment_ID ) . $after; } @@ -1050,7 +1052,7 @@ function edit_bookmark_link( $link = '', $before = '', $after = '', $bookmark = if ( empty($link) ) $link = __('Edit This'); - $link = '' . $link . ''; + $link = '' . $link . ''; echo $before . apply_filters( 'edit_bookmark_link', $link, $bookmark->link_id ) . $after; } @@ -1335,18 +1337,50 @@ function get_boundary_post( $in_same_cat = false, $excluded_categories = '', $st return get_posts( array('numberposts' => 1, 'category' => $categories, 'order' => $order, 'update_post_term_cache' => false, 'update_post_meta_cache' => false) ); } +/* + * Get previous post link that is adjacent to the current post. + * + * @since 3.7.0 + * + * @param string $format Optional. Link anchor format. + * @param string $link Optional. Link permalink format. + * @param bool $in_same_cat Optional. Whether link should be in same category. + * @param string $excluded_categories Optional. Excluded categories IDs. + * @return string + */ +function get_previous_post_link( $format = '« %link', $link = '%title', $in_same_cat = false, $excluded_categories = '' ) { + return get_adjacent_post_link( $format, $link, $in_same_cat, $excluded_categories, true ); +} + /** * Display previous post link that is adjacent to the current post. * * @since 1.5.0 + * @uses get_previous_post_link() * * @param string $format Optional. Link anchor format. * @param string $link Optional. Link permalink format. * @param bool $in_same_cat Optional. Whether link should be in a same category. * @param array|string $excluded_categories Optional. Array or comma-separated list of excluded category IDs. */ -function previous_post_link($format='« %link', $link='%title', $in_same_cat = false, $excluded_categories = '') { - adjacent_post_link($format, $link, $in_same_cat, $excluded_categories, true); +function previous_post_link( $format = '« %link', $link = '%title', $in_same_cat = false, $excluded_categories = '' ) { + echo get_previous_post_link( $format, $link, $in_same_cat, $excluded_categories ); +} + +/** + * Get previous post link that is adjacent to the current post. + * + * @since 3.7.0 + * @uses get_next_post_link() + * + * @param string $format Optional. Link anchor format. + * @param string $link Optional. Link permalink format. + * @param bool $in_same_cat Optional. Whether link should be in same category. + * @param string $excluded_categories Optional. Excluded categories IDs. + * @return string + */ +function get_next_post_link( $format = '« %link', $link = '%title', $in_same_cat = false, $excluded_categories = '' ) { + return get_adjacent_post_link( $format, $link, $in_same_cat, $excluded_categories, false ); } /** @@ -1359,24 +1393,25 @@ function previous_post_link($format='« %link', $link='%title', $in_same_ca * @param bool $in_same_cat Optional. Whether link should be in a same category. * @param array|string $excluded_categories Optional. Array or comma-separated list of excluded category IDs. */ -function next_post_link($format='%link »', $link='%title', $in_same_cat = false, $excluded_categories = '') { - adjacent_post_link($format, $link, $in_same_cat, $excluded_categories, false); +function next_post_link( $format = '%link »', $link = '%title', $in_same_cat = false, $excluded_categories = '' ) { + echo get_next_post_link( $format, $link, $in_same_cat, $excluded_categories ); } /** - * Display adjacent post link. + * Get adjacent post link. * * Can be either next post link or previous. * - * @since 2.5.0 + * @since 3.7.0 * * @param string $format Link anchor format. * @param string $link Link permalink format. * @param bool $in_same_cat Optional. Whether link should be in a same category. * @param array|string $excluded_categories Optional. Array or comma-separated list of excluded category IDs. * @param bool $previous Optional, default is true. Whether to display link to previous or next post. + * @return string */ -function adjacent_post_link( $format, $link, $in_same_cat = false, $excluded_categories = '', $previous = true ) { +function get_adjacent_post_link( $format, $link, $in_same_cat = false, $excluded_categories = '', $previous = true ) { if ( $previous && is_attachment() ) $post = get_post( get_post()->post_parent ); else @@ -1390,6 +1425,7 @@ function adjacent_post_link( $format, $link, $in_same_cat = false, $excluded_cat if ( empty( $post->post_title ) ) $title = $previous ? __( 'Previous Post' ) : __( 'Next Post' ); + /** This filter is documented in wp-includes/post-template.php */ $title = apply_filters( 'the_title', $title, $post->ID ); $date = mysql2date( get_option( 'date_format' ), $post->post_date ); $rel = $previous ? 'prev' : 'next'; @@ -1404,7 +1440,26 @@ function adjacent_post_link( $format, $link, $in_same_cat = false, $excluded_cat $adjacent = $previous ? 'previous' : 'next'; - echo apply_filters( "{$adjacent}_post_link", $output, $format, $link, $post ); + return apply_filters( "{$adjacent}_post_link", $output, $format, $link, $post ); +} + +/** + * Display adjacent post link. + * + * Can be either next post link or previous. + * + * @since 2.5.0 + * @uses get_adjacent_post_link() + * + * @param string $format Link anchor format. + * @param string $link Link permalink format. + * @param bool $in_same_cat Optional. Whether link should be in a same category. + * @param array|string $excluded_categories Optional. Array or comma-separated list of excluded category IDs. + * @param bool $previous Optional, default is true. Whether to display link to previous or next post. + * @return string + */ +function adjacent_post_link( $format, $link, $in_same_cat = false, $excluded_categories = '', $previous = true ) { + echo get_adjacent_post_link( $format, $link, $in_same_cat, $excluded_categories, $previous ); } /** @@ -1913,7 +1968,7 @@ function get_home_url( $blog_id = null, $path = '', $scheme = null ) { } if ( ! in_array( $scheme, array( 'http', 'https', 'relative' ) ) ) { - if ( is_ssl() && ! is_admin() ) + if ( is_ssl() && ! is_admin() && 'wp-login.php' !== $GLOBALS['pagenow'] ) $scheme = 'https'; else $scheme = parse_url( $url, PHP_URL_SCHEME ); @@ -2238,10 +2293,17 @@ function set_url_scheme( $url, $scheme = null ) { $scheme = ( is_ssl() ? 'https' : 'http' ); } - if ( 'relative' == $scheme ) - $url = preg_replace( '#^.+://[^/]*#', '', $url ); - else - $url = preg_replace( '#^.+://#', $scheme . '://', $url ); + $url = trim( $url ); + if ( substr( $url, 0, 2 ) === '//' ) + $url = 'http:' . $url; + + if ( 'relative' == $scheme ) { + $url = ltrim( preg_replace( '#^\w+://[^/]*#', '', $url ) ); + if ( $url !== '' && $url[0] === '/' ) + $url = '/' . ltrim($url , "/ \t\n\r\0\x0B" ); + } else { + $url = preg_replace( '#^\w+://#', $scheme . '://', $url ); + } return apply_filters( 'set_url_scheme', $url, $scheme, $orig_scheme ); } @@ -2351,20 +2413,22 @@ function wp_get_shortlink($id = 0, $context = 'post', $allow_slugs = true) { global $wp_query; $post_id = 0; - if ( 'query' == $context && is_single() ) { + if ( 'query' == $context && is_singular() ) { $post_id = $wp_query->get_queried_object_id(); + $post = get_post( $post_id ); } elseif ( 'post' == $context ) { - $post = get_post($id); - $post_id = $post->ID; + $post = get_post( $id ); + if ( ! empty( $post->ID ) ) + $post_id = $post->ID; } $shortlink = ''; - // Return p= link for posts. - if ( !empty($post_id) && '' != get_option('permalink_structure') ) { - $post = get_post($post_id); - if ( isset($post->post_type) && 'post' == $post->post_type ) - $shortlink = home_url('?p=' . $post->ID); + // Return p= link for all public post types. + if ( ! empty( $post_id ) ) { + $post_type = get_post_type_object( $post->post_type ); + if ( $post_type->public ) + $shortlink = home_url('?p=' . $post_id); } return apply_filters('get_shortlink', $shortlink, $id, $context, $allow_slugs);