Как изменить значение переменной плагина WordPress - PullRequest
0 голосов
/ 02 декабря 2018

myCred - это плагин для WordPress , который позволяет легко создавать Балансы баллов и настраивать шаги, которые пользователи предпринимают для их получения.

Вот ссылки на их плагин с открытым исходным кодом:

Github: https://github.com/wp-plugins/mycred

Сайт myCred: https://mycred.me/

Wordpress: https://wordpress.org/plugins/mycred/

Готов!вот оно: я не могу найти решение, как добавить свои $amount к $current_balance, чтобы получить $new_balance?

Я пробовал что-то подобное уже без удачи:

add_filter('filter_update_users_balance', 'add_my_own_amount');

function add_my_own_amount($amount){
return 10;
}

Давайте рассмотрим файл mycred-functions.php .

Прежде всего, он возвращает баланс пользователей следующим образом: (Я не уверен, нужно ли читать, чтобы решить мою проблему или нет, я рекомендую пропустить это сейчас :))

     /**
      * Get users balance

     * Returns the users balance unformated.
     *
     * @param $user_id (int), required user id
     * @param $type (string), optional cred type to check for
     * @returns zero if user id is not set or if no creds were found, else returns amount
     * @since 0.1
     * @version 1.4.1
     */
public function get_users_balance( $user_id = NULL, $type = NULL ) {

    if ( $user_id === NULL ) return $this->zero();

    // Type
    $point_types = mycred_get_types();
    if ( $type === NULL || ! array_key_exists( $type, $point_types ) ) $type = $this->get_cred_id();

    $balance = mycred_get_user_meta( $user_id, $type, '', true );
    if ( $balance == '' ) $balance = $this->zero();

    // Let others play
    $balance = apply_filters( 'mycred_get_users_cred', $balance, $this, $user_id, $type );

    return $this->number( $balance );

}
    // Replaces
    public function get_users_cred( $user_id = NULL, $type = NULL ) {

        return $this->get_users_balance( $user_id, $type );

    }

после этого он Обновляет баланс пользователей например:

здесь у нас есть строка кода $new_balance = $current_balance+$amount;, которая показывает нам, как плагин возвращает новые балансы пользователей.и в самом низу кода он делает return $this->number( $new_balance );, поэтому мы можем установить баланс пользователей на основе значения $new_balance позже.

/**
         * Update users balance
         * Returns the updated balance of the given user.
         *
         * @param $user_id (int), required user id
         * @param $amount (int|float), amount to add/deduct from users balance. This value must be pre-formated.
         * @param $type (string), optional point type key to adjust instead of the current one.
         * @returns the new balance.
         * @since 0.1
         * @version 1.4.2
         */
        public function update_users_balance( $user_id = NULL, $amount = NULL, $type = NULL ) {

            // Minimum Requirements: User id and amount can not be null
            if ( $user_id === NULL || $amount === NULL ) return $amount;

            // Type
            $point_types = mycred_get_types();
            if ( $type === NULL || ! array_key_exists( $type, $point_types ) ) $type = $this->get_cred_id();

            // Enforce max
            if ( $this->max() > $this->zero() && $amount > $this->max() ) {

                $_amount = $amount;
                $amount  = $this->number( $this->max() );

                do_action( 'mycred_max_enforced', $user_id, $_amount, $this->max() );

            }

            // Adjust creds
            $current_balance = $this->get_users_balance( $user_id, $type );
            $new_balance     = $current_balance+$amount;

            // Update creds
            mycred_update_user_meta( $user_id, $type, '', $new_balance );

            // Update total creds
            $total = mycred_query_users_total( $user_id, $type );
            mycred_update_user_meta( $user_id, $type, '_total', $total );

            // Clear caches
            mycred_delete_option( 'mycred-cache-total-' . $type );

            // Let others play
            do_action( 'mycred_update_user_balance', $user_id, $current_balance, $amount, $type );

            // Return the new balance
            return $this->number( $new_balance );

        }

Тогда это устанавливает баланс пользователей следующим образом:

/**
         * Set users balance
         * Changes a users balance to the amount given.
         *
         * @param $user_id (int), required user id
         * @param $new_balance (int|float), amount to add/deduct from users balance. This value must be pre-formated.
         * @returns (bool) true on success or false on fail.
         * @since 1.7.3
         * @version 1.0.1
         */
        public function set_users_balance( $user_id = NULL, $new_balance = NULL ) {

            // Minimum Requirements: User id and amount can not be null
            if ( $user_id === NULL || $new_balance === NULL ) return false;

            $type        = $this->get_cred_id();
            $new_balance = $this->number( $new_balance );
            $old_balance = $this->get_users_balance( $user_id, $type );

            // Update balance
            mycred_update_user_meta( $user_id, $type, '', $new_balance );

            // Clear caches
            mycred_delete_option( 'mycred-cache-total-' . $type );

            // Let others play
            do_action( 'mycred_set_user_balance', $user_id, $new_balance, $old_balance, $this );

            return true;

        }

Наконец, в файле mycred-balances.php у нас есть:

// Add to the balance
   if ( $method == 'add' )
   $mycred->update_users_balance( $user_id, $balance );

// Change the balance
   else
   $mycred->set_users_balance( $user_id, $balance );

Я провел несколько часов ичасов, чтобы найти решение, Я думаю, что не могу найти решение , поэтому я был бы очень признателен, если бы вы могли помочь мне решить эту проблему.

Редактировать:

Я хочу увеличить значение $amount myCred со значением моей переменной javascript!Я хочу присвоить переменной плагина Wordpress (я думаю, что это $amount) значение переменной javascript, чтобы подключить интерактивные курсы электронного обучения к плагину myCred WordPress, что было бы потрясающим опытом геймификации…!

Позвольте мне объяснить это немного подробнее:

Используя метод jQuery post(), я могу отправить данные (например, числовую переменную javascript) для обработки в указанный файл PHP на сервере.давайте посмотрим на мой код, чтобы понять, что я хочу с ним сделать:

Вот мой код JavaScript:

var speechResult= 10;          
$.ajax({
    url:"https://...Example.php",
    method: "post",
    data: {'speechResult': speechResult},
    success: function(res) {
             console.log(res)
    }
  });

А вот код в моем примере.PHP .он просто показывает speechResult значение в консоли (значение, полученное из моего кода JavaScript!):

<?php
    print($_POST['speechResult'])
?>

, как вы можете видеть, у меня есть переменная JavaScript с именем speechResult , и у меня есть PHP файл с именем «Example.php».

Используя приведенный выше код, я могу передать значение speechResult в Пример.php или любой другой PHP файл на сервере ( Но не PHP-файлы плагина myCred, потому что я не знаю, как использовать хуки, фильтры, действия и т. д. ).

Если я передам значение ** speechResult в переменную $amount в myCred **, то я буду контролировать точки перемотки для пользователей на основе того, что происходит в e-leaning html5курс ...

Я хочу передать значение speechResult , чтобы присвоить значение myCred $amount ... для увеличения или уменьшения , используя общую точку баланса .

1 Ответ

0 голосов
/ 02 декабря 2018

Я не совсем уверен, чего вы хотите достичь.Может быть, добавив 10 к каждому балансу?

Вы можете использовать add_filter везде, где вы найдете apply_filters в коде.Так вот например:

add_filter('mycred_get_users_cred', function($balance, $this, $user_id, $type) {
    return $balance + 10;
});

Не уверен, поможет ли это ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...