Вивід кількості коментарів – валідно
Не так давно я зіткнувся із такою функцією, як вивід кількості коментарів і захотів поставити її на свій блог. Давайте поглянемо як це реалізовано у WordPress.
Для виводу кількості коментарів ми використовуємо стандартну функцію, яка має вигляд:
1 |
<?php comments_number('0 коментарів', '1 коментар', '% коментаря'); ?> |
Її достатньо вставити в цикл і вона буде коректно працювати. І як зрозуміло з коду, нам дають можливість вивести кількість коментарів із текстом, для 3-х варіантів (0, 1 і більше коментарів), але не вистачає одного варіанта, адже якщо в 3-му значені ви написали “% коментаря” то, наприклад, “100 коментаря” буде не правильно, тому вмикаємо фантазію…
Ви можете зробити посилання на коментарі, де “#comments” якірне посилання на id=”comments” на сторінці із статтею.
1 2 3 |
<a href="<?php the_permalink() ?>#comments"> <?php comments_number('0 коментарів', '1 коментар', '% коментаря'); ?> </a> |
І на цьому можна було б завершити дану статтю, але все б нічого, так є ж одне “але”.
Переглянувши валідність свого коду, я помітив помилку.
Розібравшись де помилка я був здивованим, адже це стандартна функція WordPress… Мені важко дати відповідь чи це у всіх так, чи тільки у мене, але факт є фактом. Скориставшись пошуком, я не знайшов ніякої інформації як це виправити і вирішив обійти.
На допомогу прийшов хак, навіть два :)
1. Спосіб
У functions.php додаємо:
1 2 3 4 |
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)] ]; } |
В місце, де потрібно виводити кількість коментарів, додаємо:
1 2 3 4 5 6 7 |
<?php plural_form( get_comments_number(), /* варіанти для 1, 2 і 5 */ array('коментар','коментаря','коментарів') ); ?> |
Я використав даний метод, валідацію проходить на “Ура!”.
2. Спосіб
При використанні даного способу, результат буде мати вигляд “опублікований 1 коментар”.
У functions.php додаємо:
1 2 3 4 |
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)]]; } |
В місце, де потрібно виводити кількість коментарів, додаємо:
1 2 3 4 5 6 7 8 |
<?php plural_form( get_comments_number(), /* варіанти для 1, 2 і 5 */ array('опублікований','опубліковано','опубліковано'), array('коментар','коментаря','коментарів') ); ?> |
Цей метод теж валідний.
Ось така історія, друзі. Вам успіхів! А я пішов далі відточувати код :)