Зарегистрированные пользователи

Я вывожу на сайте количество зарегистрированных пользователей вот таким кодом:

function declens($int, $expressions)
function get_wp_ver() {
    global $wp_version;
    preg_match("/\d\.\d/i", $wp_version, $match);
    // wpmu - increment version by 1.0 to match wp
    if (strpos($wp_version, 'wordpress-mu') !== false) {
        $match[0] = $match[0] + 1.0;
    }
    return $match[0];
}

$users = $wpdb->get_var("SELECT COUNT(*) FROM $wpdb->users");
if (0 <$users) $users = number_format($users);

{
    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;
}

В какой то момент этот код перестал работать. Упорно выводит одного пользователя, хотя их там перевалило за 3 тысячи. Не пойму почему – в коде я ничего не меняла и вот – перестал работать.

Господа специалисты в wordpress, помогите, пожалуйста, разобраться, как исправить эту проблему.

Ю.Б, помогите, плиз…
Остальным эта задача, по видимому, не по зубам.

То, что Вы привели выше, не то что работать, а и компилироваться не должно – синтаксическая ошибка в первой же строке.

Какая?
Я разбираюсь в php на очень примитивном уровне, поэтому самостоятельно эту ошибку мне не обнаружить. Подскажите, пожалуйста, какая там ошибка?

Привожу весь код – там могут быть и другие ошибки.
Специалист, который это написал для моего сайта, на мои письма не отзывается.

<?php 
function get_wp_ver() {
    global $wp_version;
    preg_match("/\d\.\d/i", $wp_version, $match);
    // wpmu - increment version by 1.0 to match wp
    if (strpos($wp_version, 'wordpress-mu') !== false) {
        $match[0] = $match[0] + 1.0;
    }
    return $match[0];
}
/* Количество постов */
if (get_wp_ver() < '2.3') $ptype = '';
    else $ptype = " AND post_type = 'post'";
$numposts = $wpdb->get_var("SELECT COUNT(*) FROM $wpdb->posts WHERE post_status = 'publish'$ptype");
if (0 <$numposts) $numposts = number_format($numposts);
/* Количество авторов */
$users = $wpdb->get_var("SELECT COUNT(*) FROM $wpdb->users");
if (0 <$users) $users = number_format($users);
function declension($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;
}
function declens($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;
}
?>
Какая?

Синтаксическая.

Специалист, который это написал для моего сайта, на мои письма не отзывается.

😀

Уже лучше. Этот код рабочий. По крайней мере у меня на тестовом сайте 10 юзеров отсчитал честно. (Надеюсь, Вы понимаете, что я не буду придумывать 3 тысячи ников ради проверки ненужного мне кода :))

Но я вообще не вижу в этом коде вывода.

Этот код находится в файле functions.php, а вывод идет в index.php

 В настоящее время на сайте опубликовано
                 <?php echo declension($numposts, array("статья", "статьи", "статей")) ?> 
               и зарегистрировано <?php echo declens($users, array("автор", "автора", "авторов")) ?>.

Может в этой части ошибка? Почему то он, все-таки, не работает.

Этот код находится в файле functions.php, а вывод идет в index.php

И так работает. Хоть и не совсем по-русски:

В настоящее время на сайте опубликовано 21 статья и зарегистрировано зарегистрирован 10 авторов.

Так в чем же там может быть проблема?!!!!
Почему у меня перестал работать?

Ю.Б., от чего это может зависеть? Может какие-то плагины или еще что вызывают это?
Вы – человек опытный, помогите понять, что происходит с этим кодом, плиз..

Уберите строку
if (0 <$users) $users = number_format($users);

Ю.Б., вы гений! Все заработало.
Сколько я мучилась с этим кодом.
Спасибо большущее |_____________________________________________________| вот такое.

Странно, этот код прекрасно работает в файле index.php, но совершенно не работает в хедере.
А мне он как раз в хедере нужен.

С чем это может быть связано?

Ничего странного. Это связано с видимостью переменных. Попробуйте добавить
<?php global $numposts, $users; ?>
перед использованием.

Ю.Б., вы точно гений, или ясновидящий – опять все работает. Супер!

Просто я уже три десятка лет как знаком с программированием 🙂

Anonymous
Отправить
Ответ на: