Делаем правильные окончания в словах после чисел

WordPress правильные окончания слов после числительных

Здравствуйте!

Сегодня я сделал свой блог более грамотным! Теперь он не выводит надписи типа “22 комментариев”. Знакомая проблема русифицированных шаблонов WordPress? Вот в данной статье я вам и расскажу как элегантно исправить этот недочет.

Начну с наглядной демонстрации проблемы.

Вот, что было у меня до сегодняшних изменений:

1. Заголовок после каждой статьи перед блоком комментариев

Wordpress неправильное окончание в слове после числа

2. Подпись при просмотре списка анонсов статей конкретной рубрики, или конкретного тега, архива и т.п.

Wordpress неверное окончание в слове после числа

 

Теперь сразу решение вопроса, без воды и без плагина.

Добавьте следующий код в файл functions.php:

Теперь немного объяснений для жаждущих. Хотя, по комментариям к коду, возможно, все итак понятно.

Функция get_num_ending() – универсальная функция для склонения слов к числам. Достаточно предать ей число и массив слов для чисел 1, 2, 5.

Например:

Результат работы: 100 статей.

Я специально сделал этот код отдельной функцией, чтобы её можно было применить не только для комментариев, но и в других случаях, если понадобится.

comments_number_ru() – это функция-фильтр, код которой будет выполняться в момент отработки стандартной функции WordPress comments_number(). Именно comments_number() отвечает за вывод надписей типа “1000 комментариев”. А о фильтрах я уже немного писал в статье о создании плагина.

Внутри comments_number_ru() мы получаем количество комментариев к текущей статье, если их нет, то функция вернет строку “Комментариев нет”, если же комментариев больше 0, то с помощью нашей универсальной функции будет сформирована грамматически правильная строка со словом “комментарий” в нужном склонении.

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

Минус такого варианта – необходимо вносить изменения в нескольких местах шаблона.

И самое простое, что можно сделать – это уйти от формата “n комментариев”. Вместо слова “комментарии”, например, вывести соответствующую иконку. Так же можно число и слово поменять местами и выводить комментарии (13). Но, опять же, эти изменения потребуют правок шаблона в нескольких файлах.

Такие изменения имеют смысл, если вы хотите сделать различные варианты вывода количества комментариев: в одном случае выводить иконку, в другом – текст с числом.

Если же формат вывода будет везде одинаков, то проще и быстрее применить, предложенный мной вариант, который требует всего лишь добавления в functions.php двух функций. Скопировали – вставили – проверили – и забыли.

Почему не рекомендую использовать плагин для данной проблемы? Потому что задача слишком мелкая, а плагин забирает определенное время на проверку наличия своих файлов, своего статуса (активирован или нет) и т.п. К тому же, плагин по русификации окончаний будет использовать такую же логику применения фильтра, которая есть и в моем коде. Так что отличия будут только в скорости, и не в пользу плагина.

Так что проверяйте какие окончания у надписи “n комментариев“ на вашем блоге. И если понадобится, то исправляйте. Я вот сам только недавно заметил этот недочет. Полагаю, в новых шаблонах такого не должно встречаться. Ведь совсем нетрудно скопировать немного дополнительного кода в functions.php. Но, мало ли…

Все, пока! Напишите как у вас дела с окончаниями после чисел. =)

Понравилась статья? Не забудьте поделиться с друзьями и коллегами:

Вы можете пропустить чтение записи и оставить комментарий. Размещение ссылок запрещено.

4 комментария к записи “Делаем правильные окончания в словах после чисел”

  1. Ваня

    Спасибо, давно мучила эта проблема, руки не доходили.
    Добавил ваш код на сайт, глаза радуются)

  2. Руслан

    Добрый день. Настраиваю комментарии. ПО вашей рекомендации сделал, теперь выводится правильно, только слово комментарии берется в кавычки. Как убрать кавычки?

    • Алексей Ершов

      Добрый день!
      Трудно сказать, не видя кода. Если функции у вас в точности такие же как в этой статье, то может в comments.php при выводе кавычки присутствуют.

  3. Линда

    Здравствуйте! Спасибо большое за код. Сработало хорошо для комментариев.

    Хотя не сработало для <?php printf( _n( 'One thought on “%2$s”', '%1$s thoughts on “%2$s”', get_comments_number(), 'kage' ), number_format_i18n( get_comments_number() ), '‘ . get_the_title() . ‘‘ );?>

    Я поменяла “one thought” на “комментарии”, но код не сработал.

    Не подскажете, как решить проблему?
    Спасибо большое.

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

Для размещения кода в комментарии используйте теги <pre> </pre>, например:


Подписаться, не комментируя