Как запретить Wordpress сокращать длинные ЧПУ (URL) в админке

27 янв. 2012 г., 18:34:59
Просмотры: 1.48K
Голосов: 6

На страницах редактирования записей, когда ЧПУ (URL) превышает определенное количество символов, WordPress сокращает его, добавляя многоточие (...). Например, если мой ЧПУ выглядит как i-want-to-be-able-to-see-this-slug, на странице редактирования он отображается так:

Постоянная ссылка: http://example.com/2012/i-want-to-be-a...-see-this-slug/ [Править]

Можно ли запретить WordPress делать это?

Мне важно видеть (и копировать) полный URL без сокращений, поэтому я очень хочу узнать, как отключить эту функцию.

1
Комментарии

редактировать теги только для улучшения связанного контента

bueltge bueltge
27 янв. 2012 г. 20:05:38
Все ответы на вопрос 3
1

В конце функции есть фильтр: 'get_sample_permalink_html'. Подключитесь к нему и просто замените сокращенную форму на полную.

<?php # -*- coding: utf-8 -*-
/* Plugin Name: T5 Полный ЧПУ (не сокращенный) */

add_filter( 'get_sample_permalink_html', 't5_unabridge_sample_permalink', 10, 2 );

/**
 * Заменяет сокращенный ЧПУ на его полную форму.
 *
 * @param  string $sample HTML ЧПУ
 * @param  int    $id ID записи
 * @return string
 */
function t5_unabridge_sample_permalink( $sample, $id )
{
    $link = get_sample_permalink( $id );
    $s1   = '<span id="editable-post-name" ';
    $s2   = '</span>';

    return preg_replace(
        '~' . $s1 . '([^>]*)>([^<]*)' . $s2 . '~Ui',
        $s1 . '$1>' . $link[1] . $s2,
        $sample
    );
}

Результат

Название записи: Это довольно длинное название записи. WordPress по умолчанию сократит его, но наш удобный плагин предотвращает это.

Пример работы плагина для полного отображения ЧПУ

Скачать с GitHub.

4 июл. 2012 г. 04:25:11
Комментарии

Привет toscho - Я везде искал ответ на этот вопрос; больше нигде его не нашел, насколько я могу судить! Спасибо большое!!!!

MikeSchinkel MikeSchinkel
15 мар. 2014 г. 07:57:33
0

Это невозможно сделать через фильтр или хук действия. WordPress жестко обрезает строки в ядре. Смотрите файл wp-admin/includes/post.php, строка 1110 в WP 3.4 alpha.

if ( function_exists('mb_strlen') ) {
    if ( mb_strlen($post_name) > 30 ) {
        $post_name_abridged = mb_substr($post_name, 0, 14). '&hellip;' . mb_substr($post_name, -14);
    } else {
        $post_name_abridged = $post_name;
    }
} else {
    if ( strlen($post_name) > 30 ) {
        $post_name_abridged = substr($post_name, 0, 14). '&hellip;' . substr($post_name, -14);
    } else {
        $post_name_abridged = $post_name;
    }
}

Вы можете создать тикет в Trac WordPress, чтобы добавить фильтр.

27 янв. 2012 г. 19:13:02
1
-4

Как отмечает @bueltge в своем ответе, в настоящее время нет фильтра или хука действия, который бы это позволял. Вот мой хак, чтобы предотвратить сокращение ....

В файле wp-admin/includes/post.php найдите эту строку (в WordPress 3.4.1 это строка 1117):

$post_name_html = '<span id="editable-post-name" title="' . $title . '">' . $post_name_abridged . '</span>';

Измените её на:

// Изменили $post_name_abridged на $post_name, чтобы предотвратить сокращение "..." длинных ЧПУ
$post_name_html = '<span id="editable-post-name" title="' . $title . '">' . $post_name . '</span>';

Конечно, поскольку это изменение файла ядра, оно будет перезаписано при обновлении WordPress до новой версии.

Если кто-то может предложить способ добиться этого без изменения ядра, я бы конечно предпочел его этому решению.

1 июл. 2012 г. 22:03:48
Комментарии

Не следует редактировать основные файлы. Смотрите ответ @toscho для обходного решения.

Stephen Harris Stephen Harris
4 июл. 2012 г. 20:31:17