From 564d80e29fc0f6cb4c2404dfdc6031545bb8819c Mon Sep 17 00:00:00 2001 From: Ryan Boren Date: Thu, 15 Aug 2013 20:09:09 +0000 Subject: [PATCH] wp_get_shortlink() improvements. * Return shortlinks for pages and public CPTs. * Return shortlinks even when cruft-free links are not enabled. * Unit tests Props sillybean, layotte, cais fixes #18632 see #14760 Built from https://develop.svn.wordpress.org/trunk@25030 git-svn-id: http://core.svn.wordpress.org/trunk@25017 1a063a9b-81f0-0310-95a4-ce76da25c4cd --- wp-admin/edit-form-advanced.php | 2 +- wp-includes/link-template.php | 15 ++++++++------- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/wp-admin/edit-form-advanced.php b/wp-admin/edit-form-advanced.php index e656dd5d60..4fef80f0eb 100644 --- a/wp-admin/edit-form-advanced.php +++ b/wp-admin/edit-form-advanced.php @@ -368,7 +368,7 @@ wp_nonce_field( 'closedpostboxes', 'closedpostboxesnonce', false ); public ? get_sample_permalink_html($post->ID) : ''; $shortlink = wp_get_shortlink($post->ID, 'post'); -if ( !empty($shortlink) ) +if ( !empty( $shortlink ) && $shortlink !== get_permalink( $post->ID ) ) $sample_permalink_html .= '' . __('Get Shortlink') . ''; if ( $post_type_object->public && ! ( 'pending' == get_post_status( $post ) && !current_user_can( $post_type_object->cap->publish_posts ) ) ) { diff --git a/wp-includes/link-template.php b/wp-includes/link-template.php index 5fb61726fb..91c375d628 100644 --- a/wp-includes/link-template.php +++ b/wp-includes/link-template.php @@ -2351,20 +2351,21 @@ 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 = get_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);