WordPress Version: .30
/**
* Returns the HTML of the sample permalink slug editor.
*
* @since 2.5.0
*
* @param int $id Post ID or post object.
* @param string $new_title Optional. New title. Default null.
* @param string $new_slug Optional. New slug. Default null.
* @return string The HTML of the sample permalink slug editor.
*/
function get_sample_permalink_html($id, $new_title = null, $new_slug = null)
{
$post = get_post($id);
if (!$post) {
return '';
}
list($permalink, $post_name) = get_sample_permalink($post->ID, $new_title, $new_slug);
$view_link = false;
$preview_target = '';
if (current_user_can('read_post', $post->ID)) {
if ('draft' === $post->post_status) {
$draft_link = set_url_scheme(get_permalink($post->ID));
$view_link = get_preview_post_link($post, array(), $draft_link);
$preview_target = " target='wp-preview-{$post->ID}'";
} else if ('publish' === $post->post_status || 'attachment' === $post->post_type) {
$view_link = get_permalink($post);
} else {
// Allow non-published (private, future) to be viewed at a pretty permalink.
$view_link = str_replace(array('%pagename%', '%postname%'), $post->post_name, $permalink);
}
}
// Permalinks without a post/page name placeholder don't have anything to edit
if (false === strpos($permalink, '%postname%') && false === strpos($permalink, '%pagename%')) {
$return = '<strong>' . __('Permalink:') . "</strong>\n";
if (false !== $view_link) {
$display_link = urldecode($view_link);
$return .= '<a id="sample-permalink" href="' . esc_url($view_link) . '"' . $preview_target . '>' . esc_html($display_link) . "</a>\n";
} else {
$return .= '<span id="sample-permalink">' . $permalink . "</span>\n";
}
// Encourage a pretty permalink setting
if ('' == get_option('permalink_structure') && current_user_can('manage_options') && !('page' == get_option('show_on_front') && $id == get_option('page_on_front'))) {
$return .= '<span id="change-permalinks"><a href="options-permalink.php" class="button button-small" target="_blank">' . __('Change Permalinks') . "</a></span>\n";
}
} else {
if (function_exists('mb_strlen')) {
if (mb_strlen($post_name) > 34) {
$post_name_abridged = mb_substr($post_name, 0, 16) . '…' . mb_substr($post_name, -16);
} else {
$post_name_abridged = $post_name;
}
} else if (strlen($post_name) > 34) {
$post_name_abridged = substr($post_name, 0, 16) . '…' . substr($post_name, -16);
} else {
$post_name_abridged = $post_name;
}
$post_name_html = '<span id="editable-post-name">' . esc_html($post_name_abridged) . '</span>';
$display_link = str_replace(array('%pagename%', '%postname%'), $post_name_html, esc_html(urldecode($permalink)));
$return = '<strong>' . __('Permalink:') . "</strong>\n";
$return .= '<span id="sample-permalink"><a href="' . esc_url($view_link) . '"' . $preview_target . '>' . $display_link . "</a></span>\n";
$return .= '‎';
// Fix bi-directional text display defect in RTL languages.
$return .= '<span id="edit-slug-buttons"><button type="button" class="edit-slug button button-small hide-if-no-js" aria-label="' . __('Edit permalink') . '">' . __('Edit') . "</button></span>\n";
$return .= '<span id="editable-post-name-full">' . esc_html($post_name) . "</span>\n";
}
/**
* Filter the sample permalink HTML markup.
*
* @since 2.9.0
* @since 4.4.0 Added `$post` parameter.
*
* @param string $return Sample permalink HTML markup.
* @param int $post_id Post ID.
* @param string $new_title New sample permalink title.
* @param string $new_slug New sample permalink slug.
* @param WP_Post $post Post object.
*/
$return = apply_filters('get_sample_permalink_html', $return, $post->ID, $new_title, $new_slug, $post);
return $return;
}