Как отобразить склонения

Люди, подскажите, пожалуйста, что нужно сделать, чтобы отображались склонения типа, как в файле comment.php (комментария, комментарии, комментариев)

Мне нужно, чтобы выводилось количество статей, опубликованных автором.

Я сделала так:

<?php echo the_author_posts($numposts, array("статья", "статьи", "статей")) ?>

Не работает. Подскажите, плиз, чего в этом коде не хватает.

Подскажите, плиз, чего в этом коде не хватает.

Скорее «что в этом коде лишнее» 🙂

К сожалению функция <?php the_author_posts(); ?> используется без параметров в скобках.

Люди, подскажите, пожалуйста, что нужно сделать, чтобы отображались склонения типа, как в файле comment.php (комментария, комментарии, комментариев)

Легко, просто и быстро сделать не получится (впрочем – все относительно). Посмотрите как устроены плагины «Russify Comments Number» и «MaxSite Russian Date» и сделайте по аналогии свой для авторов постов. С удовольствием буду им пользоваться 🙂

Попыталась. Вот, что вышло:

<?php
function author_posts($int, $expressions)
{
    settype($int, "integer");
    $count = $int % 100;
    if ($count >= 5 && $count <= 20) {
        $result = "<strong>".$int."</strong> ".$expressions['2'];
    } else {
        $count = $count % 10;
        if ($count == 1) {
            $result = "<strong>".$int."</strong> ".$expressions['0'];
        } elseif ($count >= 2 && $count <= 4) {
            $result = "<strong>".$int."</strong> ".$expressions['1'];
        } else {
            $result = "<strong>".$int."</strong> ".$expressions['2'];
        }
    }
    return $result;
}
?>

К сожалению, работает неправильно – все время выдает одну и ту же цифру -225.
Но зато в правильном склонении.

Поможете поправить этот код?

Попыталась. Вот, что вышло:

<?php
function author_posts($int, $expressions)
{
    settype($int, "integer");
    $count = $int % 100;
    if ($count >= 5 && $count <= 20) {
        $result = "<strong>".$int."</strong> ".$expressions['2'];
    } else {
        $count = $count % 10;
        if ($count == 1) {
            $result = "<strong>".$int."</strong> ".$expressions['0'];
        } elseif ($count >= 2 && $count <= 4) {
            $result = "<strong>".$int."</strong> ".$expressions['1'];
        } else {
            $result = "<strong>".$int."</strong> ".$expressions['2'];
        }
    }
    return $result;
}
?>

К сожалению, работает неправильно – все время выдает одну и ту же цифру -225.
Но зато в правильном склонении.

Поможете поправить этот код?

Попробуйте убрать строки

$count = $int % 100;
$count = $count % 10;

По идее должно работать и без них с маленькими числами. Они нужны, конечно, но Вы их неправильно применяете. Вы вообще знаете, что они делают? 🙂

p.s.: сейчас не могу посмотреть Ваш пример более внимательно, но часика через три-четыре вернуcь и посмотрю.

Вы вообще знаете, что они делают?

Не очень. Код написала по аналогии с кодом, выводящим количество зарегистрированных пользователей.

Убрала указанные вами строки – к сожалению, ничего не изменилось.
Код выводит общее количество статей на сайте, а не количество статей конкретного автора.

сейчас не могу посмотреть Ваш пример более внимательно, но часика через три-четыре вернуcь и  посмотрю.

Спасибо за помощь. Буду ждать.

В том файле, где вам нужны склонения – вставьте такой код:

<?php 
function declension_author_posts($number=-1) {
    if ($number == -1) {
        $output = 'Количество постов функции не известно. Склонять нечего.';
    } elseif ($number == 0) {
        $output = 'Постов нет';
    } elseif ($number == 1) {
        $output = 'Пост один';
    } elseif (($number > 20) && (($number % 10) == 1)) {
        $output = str_replace('%', $number, '% пост');
    } elseif ((($number >= 2) && ($number <= 4)) || ((($number % 10) >= 2) && (($number % 10) <= 4)) && ($number > 20)) {
        $output = str_replace('%', $number, '% поста');
    } else {
        $output = str_replace('%', $number, '% постов');
    }
    echo $output;
}
?>

А там где необходимо вставить число постов с правильным склонением вставьте вызов вышеуказанной функции:

<?php declension_author_posts (get_the_author_posts()); ?>

Help Desk, спасибо большое. Все работает именно так, как мне и нужно было.
Супер!

Это не мне «спасибо», а Alexander Ulizko. Это его ф-цию из плагина Russify Comments Number я использовал 🙂

И ему тоже спасибо.

У меня не работает "Постов нет"

У пользователей которых есть посты работает корректно, а у пользователей у которых нет постов вместо нуля выдает общее количество постов на всем сайте.

Помогите разобраться, worpress 3.2.1

Шаблон свой, вот ссылка http://sami-s-rukami.ru/author/gavmariya/

Я использую

    //Правильные окончания для числительных
    function morph($int, $expressions) { 
    if (count($expressions) < 3) 
        $expressions[2] = $expressions[1]; 

    $count = $int % 100; 

    if ($count >= 5 && $count <= 20) 
        $result = 2; 
    else 
        $count = $count % 10; 

        if ($count == 1) 
            $result = 0; 
        elseif ($count >= 2 && $count <= 4) 
            $result = 1; 
        else 
            $result = 2;  

    return $int.' '.$expressions[$result];

Вызов:

Скачано <?php echo morph($get_counter, array('раз', 'раза', 'раз')); ?>
Anonymous
Отправить
Ответ на: