Ещё один простой блог в интернете, одного из жителей Сызрани, который считает себя дизайнером, WEB-мастером и фотографом-любителем

просто блог

QR CODE для записиQR CODE для записи “Подсчет знаков в Админке WP без плагина”

Подсчет знаков в Админке WP без плагина

Подсчет знаков в Админке WP без плагина

В админке, при написание статьи отображается подсчет слов. Но иногда, для копирайтеров, рерайторов, да и просто для журналистов необходимо осуществить подсчет знаков. Плагинами загружать и без того требовательный к ресурсам WordPress не всегда хочется. Поэтому я решил дописать функцию подсчета слов, что бы она еще и знаки считала.

Реализация

Ищем в директории /wp-admin/js/ файлы word-count.dev.js и word-count.js.
Затем из файла word-count.dev.js (файл для разработчиков, исходная версия) копируем всё в word-count.js (сжатая версия).

Затем находим строки:

setTimeout( function() {
				if ( tx ) {
					tx = tx.replace( /<.[^<>]*?>/g, ' ' ).replace( /&nbsp;|&#160;/gi, ' ' );
					tx = tx.replace( /[0-9.(),;:!?%#$¿'"_+=\\/-]*/g, '' );
					tx.replace( /\S\s+/g, function(){tc++;} );
				}
				w.html(tc.toString());

				setTimeout( function() { t.block = 0; }, 2000 );
			}, 1 );

И заменяем на

setTimeout( function() {
				if ( tx ) {
					tx = tx.replace( /<.[^<>]*?>/g, ' ' ).replace( /&nbsp;|&#160;/gi, ' ' );
					
					tx_space = tx.length; // подсчитываем знаки с пробелами
					tx_no_space = tx.replace(/\r\n|\r|\n|\s/g, ''); // удаляем перенос строки и пробелы
					tx_no_space = tx_no_space.length; // подсчитываем знаки без пробелов
					
					tx = tx.replace( /[0-9.(),;:!?%#$¿'"_+=\\/-]*/g, '' );
					tx.replace( /\S\s+/g, function(){tc++;} );
				}
				tc = tc + " (" + tx_space + " / " + tx_no_space + ")";
				w.html(tc.toString());

				setTimeout( function() { t.block = 0; }, 2000 );
			}, 1 );

Более подробно

Всего было добавлено 4 строчки кода. Обо всех строчках по порядку.

tx_space = tx.length; // подсчитываем знаки с пробелами

Тут мы подсчитываем знаки с пробелами. Так же, обратите внимание, что подсчет идёт с цифрами и пунктуационными знаками.
Если вы не хотите что бы у вас они считались, то необходимо добавить регулярное выражение из подсчета слов. А проще и лучше эти три строчки добавить после уже готовой строки. Т.е. Ваш код должен выглядеть так:

setTimeout( function() {
				if ( tx ) {
					tx = tx.replace( /<.[^<>]*?>/g, ' ' ).replace( /&nbsp;|&#160;/gi, ' ' );					
					tx = tx.replace( /[0-9.(),;:!?%#$¿'"_+=\\/-]*/g, '' );

					tx_space = tx.length; // подсчитываем знаки с пробелами
					tx_no_space = tx.replace(/\r\n|\r|\n|\s/g, ''); // удаляем перенос строки и пробелы
					tx_no_space = tx_no_space.length; // подсчитываем знаки без пробелов

					tx.replace( /\S\s+/g, function(){tc++;} );
				}
				tc = tc + " (" + tx_space + " / " + tx_no_space + ")";
				w.html(tc.toString());

				setTimeout( function() { t.block = 0; }, 2000 );
			}, 1 );

Следующие две добавленные строки удаляют пробелы и переносы строк (1 перенос строки — равен одному пробелу) при подсчете знаков

tx_no_space = tx.replace(/\r\n|\r|\n|\s/g, ''); // удаляем перенос строки и пробелы
tx_no_space = tx_no_space.length; // подсчитываем знаки без пробелов

Если вы тут не хотите вести подсчет каких то пунктуационных знаков, то необходимо этот код так же поместить ниже, как показано в примере выше.

Ну и последняя строка:

tc = tc + " (" + tx_space + " / " + tx_no_space + ")";

Тут мы объединяем всё для вывода в браузер.

Хотелось бы так же обратить внимание, что подсчет слов ведётся без цифр.
Если Вам необходим подсчет цифр (не одной цифры, а числа — группы цифр), как слово, то необходимо убрать из строчки регулярного выражения 0-9:

tx = tx.replace( /[.(),;:!?%#$¿'"_+=\\/-]*/g, '' );

Точно так же можно добавить в подсчет, просто удалив, любой знак.

Если Вы хотите, что бы подсчет слов вёлся без определенного набора пунктуационных знаков, а подсчет знаков без определенных своих пунктуационных знаков, то надо добавить еще одну строку, примерно таким образом

tx_space = tx.replace( /:!?%#$¿'"_+=\\/-]*/g, '' ); // тут указываем знаки, которые не будут подсчитывать для с пробелами
tx_space = tx_space.length; // подсчитываем знаки с пробелами
tx_no_space = tx.replace( /:!?$¿'"_+=\\/-]*/g, '' ); // тут указываем знаки, которые не будут подсчитывать для без пробелов
tx_no_space = tx_no_space.replace(/\r\n|\r|\n|\s/g, ''); // удаляем перенос строки и пробелы
tx_no_space = tx_no_space.length; // подсчитываем знаки без пробелов

Только будьте осторожны — при обновление WP файлы могут замениться на оригинал и Вам необходимо будет заново обновлять измененный файл!

В общем — вот и всё.

Скачать готовый файл, сжатый, можно по этой ссылке.

Update от 02.10.2011

С обновлением WordPress до версии 3.2.1 пришла проблема — старая версия скрипта не работает, т.к. изменился алгоритм скрипта.

Принцип модификации файла остался тот же, за небольшим исключением — регулярные выражения вынесены в отдельные переменные. Поэтому смысла писать всё тоже самое только для других строчек я не вижу. Те кто разбираются хоть немного — разберутся, а остальным проще будет скачать готовый сжатый файл скрипта для подсчета знаков в админке WordPress

Update от 11.09.2014

Проверенное решение для WordPress 3.9.2 и WordPress 4 смотри в комментарии ниже

Рубрики: WordPress | 10 комментариев
  1. Ha Emmid # link

    «В админке, при написание статьи отображается подсчет слов(!!!). Но иногда, для копирайтеров, рерайторов, да и просто для журналистов необходимо вести подсчет слов(!!!).»

    Оговорочка вышла. =)

  2. BaNru # link

    Ага, спасибо. Исправил.

  3. мотек # link

    заменил скрипт в админке на скаченный, но ничего не изменилось, по прежнему считает только слова…
    версия 3.3.2

  4. BaNru # link

    Проверил на WP 3.3.2, всё работает.

  5. Александр # link

    Спасибо за эту реализованную функцию.
    Долгое время пытаюсь включить отображение количество знаков рядом с заголовками статей в админке. Как в плагине Posts Character Count Admin.
    Можете подсказать, как добавить вывод количества знаков без пробелов рядом с каждой статьёй в админке?

  6. BaNru # link

    В списке статей? Тут без вмешательства на PHP не обойтись.
    Поконкретнее — где выводить? Завтра гляну.

  7. Александр # link

    Получилось изменением плагина Posts Character Count Admin.
    Поменял $pcca_char_count = strip_tags($post->post_content); на $pcca_char_count_wsp = str_replace(» «, «», $pcca_char_count);

    и

    $count = strlen(utf8_decode($this->text)); на $count = strlen(str_replace(» «, «», utf8_decode($this->text)));

  8. Олег # link

    В плагине Posts Character Count Admin нет таких строк, все облазил… А сделать что бы считались символы без пробелов очень хотелось бы) к сожалению и верхняя схема ничего не меняет в админке.

  9. BaNru # link

    Если делать по инструкции в статье, с небольшой мозговой активностью, то всё работает. Не сильно там изменилось всё.

    Проверено на WordPress 3.9.2 и WordPress 4

    Находим функцию всю туже

    setTimeout( function() {
    	if ( tx ) {
    		tx = tx.replace( t.settings.strip, ' ' ).replace( /&nbsp;|&#160;/gi, ' ' );
    		tx = tx.replace( t.settings.clean, '' );
    		tx.replace( t.settings[type], function(){tc++;} );
    	}
    	w.html(tc.toString());
    
    	setTimeout( function() { t.block = 0; }, 2000 );
    }, 1 );

    И правим, читая внимательно статью. Всё почти тоже самое, только для удобства изменил в этот раз порядок.

    setTimeout( function() {
    	if ( tx ) {
    		tx_space = tx;
    		tx_space = tx_space.replace( t.settings.strip, '' ); // Удаляем теги. Можно удалить, если надо считать теги
    		tx_no_space = tx_space.replace(/\r\n|\r|\n|\s/g, ''); // удаляем перенос строки и пробелы
    		tx_space = tx_space.length; // подсчитываем знаки с пробелами
    		tx_no_space = tx_no_space.length; // подсчитываем знаки без пробелов
    
    		tx = tx.replace( t.settings.strip, ' ' ).replace( /&nbsp;|&#160;/gi, ' ' );
    		tx = tx.replace( t.settings.clean, '' );
    		tx.replace( t.settings[type], function(){tc++;} );
    		
    		tc = tc + " (" + tx_space + " / " + tx_no_space + ")";
    	}
    	w.html(tc.toString());
    
    	setTimeout( function() { t.block = 0; }, 2000 );
    }, 1 );

    Сохраняем и радуемся.

Оставить комментарий

В блоге включена ручная модерация комментариев. Нет смысла повторно отправлять комментарий.
Поля отмеченный звездочкой * обязательны к заполнению

Перед отправкой формы: