Функция позволяет зарегистрировать строки в их единственном и множественном числе для дальнейшего перевода. Отличается от функции _n() тем, что позволяет работать с неизвестным числовым значением.
_n_noop( $singular, $plural, $domain = null )
Параметры
- $singular строка Обязательный
- Значение строки в единственном числе (для английского языка).
- $plural строка Обязательный
- Значение строки во множественном числе (для английского языка).
- $domain строка
- Идентификатор перевода. Задаётся в виде строки, не передавайте в этот параметр переменных.
Подробный пример и объяснение функции
Предположим, вы регистрируете какой-то статус записи функцией register_post_status(). И этот статус записей появляется в фильтре над постами в админке:
И прикол в том, что сам WordPress позволяет учитывать число в скобочках и в зависимости от его значения по-разному переводить слово перед ним.
Факт в том, что в реальности это не особо используется (обратите внимание на «Черновики (1)», но такая возможность есть.
Происходит это таким образом, что при регистрации статуса мы передаём параметр label_count
в следующем формате:
register_post_status( 'idea', array( 'label_count' => _n_noop( 'Idea (%s)', 'Ideas (%s)', 'true-domain' ), /* другие параметры регистрируемого статуса */ ) );
Теперь ответьте мне на вопрос – при регистрация статуса записи можем ли мы каким-то чудесным образом узнать количество постов этого статуса, чтобы использовать функцию _n() типо вот так?
'label_count' => _n( 'Idea (%s)', 'Ideas (%s)', $post_count, 'true-domain' ),
Нет конечно! Откуда? Сама функция нам это значение никак не передаёт.
И ещё момент – как же будет происходить процесс перевода? Да уже знакомыми нам функциями _n() и _nx(). Правда это будет скорее всего внутри функции-обёртки translate_nooped_plural()
.
Функция _n_noop()
будет возвращать нам ассоциативный массив вида:
print_r( $label_count ); /* Array ( [singular] => Idea (%s) [plural] => Ideas (%s) [domain] => true-domain ) */
После чего этот массив можно отправить в функцию translate_nooped_plural()
, когда уже станет известно количество постов!
printf( translate_nooped_plural( $label_count, $post_count, 'true-domain' ), $post_count );
Либо можно чуть усложнить себе жизнь и воспользоваться _n().
printf( _n( $label_count[ 'singular' ], $label_count[ 'plural' ], $post_count, 'true-domain' ), $post_count );