Простейшая функция склонения слов после числительных
На WordPress-сайтах, как правило, информация о количестве комментариев выглядит текстом вида комментариев: 21
. Более красиво это выглядело бы так: 21 комментарий
.
WordPress, естественно, не учитывает особенности русского языка, когда окончание слова после числа меняется в зависимости от этого числа.
Я предлагаю вашему вниманию простейшую PHP-функцию, которая решает данную задачу. Покажу 2 варианта этой функции.
Вариант 1
Когда нужен текст вида 21 комментарий
.
В файле functions.php темы вставляем функцию:
function plural_form($number, $after) {
$cases = array (2, 0, 1, 1, 1, 2);
echo $number.' '.$after[ ($number%100>4 && $number%100<20)? 2: $cases[min($number%10, 5)] ];
}
А в то место, где нужно выводить текст о количестве комментов, вставляем такой код:
<?php
plural_form(
get_comments_number(),
/* варианты написания для количества 1, 2 и 5 */
array('комментарий','комментария','комментариев')
);
?>
Вариант 2
Когда нужен текст вида опубликован 21 комментарий
. Т.е. в данном случае склоняется слово и перед числом, и после числа.
В файле functions.php темы вставляем функцию:
function plural_form($number,$before,$after) {
$cases = array(2,0,1,1,1,2);
echo $before[($number%100>4 && $number%100<20)? 2: $cases[min($number%10, 5)]].' '.$number.' '.$after[($number%100>4 && $number%100<20)? 2: $cases[min($number%10, 5)]];
}
А в то место, где нужно выводить текст о количестве комментов, вставляем такой код:
<?php
plural_form(
get_comments_number(),
/* варианты написания для количества 1, 2 и 5 */
array('опубликован','опубликовано','опубликовано'),
array('комментарий','комментария','комментариев')
);
?>
Если нужно, чтобы текст был ссылкой, тогда делаем так:
<a href="<?php the_permalink() ?>#comments">[тут вставляем вышеуказанный PHP-код, который выводит количество комментов]</a>
Вот, собственно, и все.
Комментарии (19)
Спасибо за функцию.
Но возник вопрос, как быть если при отсутствии комментариев выводилось не “0 комментариев”, а “Нет комментариев”?
Вот такой вариант придумал:
Благодарю!
Здравствуйте! Подскажите пожалуйста, как склонить выражение:
— если одна рубрика, то «Опубликовано в рубрике»;
— если рубрик несколько, то «Опубликовано в рубриках».
Буду признателен за помощь.
Вадим, спасибо!
Но, как сюда теперь прикрутить WordPress-функцию ?
Что то вы тут велосипеды придумываете.
Начну с этого:
Тут достаточно простого условия:
Незачем строить конструкции из свитчей без надобности.
Теперь перейдем к самой функции склонения.
Вот тут: (Извиняюсь конечно)
Но это бред сивой кобылы.
Достаточно просто переписать нормально функцию например вот так:
Это функция моя просто название поставил ваше.
А теперь вывод:
Тем самым немного изменив функцию мы убиваем сразу несколько зайцев.
1. Нам больше не надо изменять функцию. Так как она подойдет для всего.
2. Мы расширили функционал сайта. И немного уменьшили нагрузку.(Хотя для Wp давно забило о наблюдении за нагрузкой)
Добрый день. А как все это можно преобразовать в вордпресовский шорткод?
У меня есть шорткод, который выводит количество записей в категории:
Хотелось, чтобы этот шорткод выводил после числа – слово запись(‘и’, ‘ей’).
Заранее спасибо.
Доработал вашу функцию =)
Теперь есть все проверки, проще задать текст в переменной и можно его отключать.
А если надо записать текст в переменную, что будет правильно, то код будет такой
Здавствуйте! Использовал вашу функцию, был доволен, но столкнулся с такой проблемой. При поиске нашлось 15 материалов и выдало такую ошибку:
По Вашему запросу
Notice (8): Undefined offset: 2 [APP\View\Helper\SearchingHelper.php, line 10] 15 ответов :
вызываю так
а код функции как в этой статье – Вариант 2
Подскажите как решить эту проблемку.
Здравствуйте, а как использовать для склонения поисковых запросов? Пример: Найдено (найден) NN поисковых запроса, запросов или запрос.
Код из двух вариантов отображения ниже:
Используйте второй вариант и вместо
get_comments_number()
вставьте$count
.Благодарю, так намного лучше, вот только как учесть нормы склонения двух языков, когда для сайта используется английский и русский? Ведь текст перевода внесен в файл .PO. Или никак.
Вот это не знаю.
Спасибо за функцию. Оказалась очень полезна.
Но я ее немного доработал.
Может кому пригодится.
Сами функции:
Варианты использования
Вывод:
Результат:
Спасибо за внимание.
А для чего это может пригодиться? Poedit не достаточно?
Вот спасибочки. Это мне точно пригодится.
Огромное спасибо! Очень помогло! Люблю компактные решения :)