Введите часть искомого слова, названия или фразы...
↑ ↓
  1. Новые темы озаглавленные с маленькой буквы - удаляются без предупреждения!
  2. Вопрос без рабочей ссылки на проблему считается риторическим. Без ссылки и скриншота - провокацией!

Помогите доказать автору плагина, что что он не прав, ну или я сам болван ))

Тема в разделе "Общее для WordPress", создана пользователем joy66, 20 окт 2015.

  1. joy66

    joy66

    Сообщения:
    76
    Симпатии:
    13
    Баллы:
    8
    Вводная часть. (простите , что букв будет много)
    Есть плагин Easy Digital Downloads. Замечательная штука для продажи цифровых товаров.
    Возник тут вопрос на форуме, как добавить украинскую гривну и чтоб цена отображалась как 100 грн.

    В качестве уже зарегистрированных валют нет UAH . Но разработчик предусмотрел возможность регистрировать доп. валюты фильтром edd_currencies
    Код:
    function edd_get_currencies() {
       $currencies = array(
         'USD'  => __( 'US Dollars ($)', 'easy-digital-downloads' ),
         'EUR'  => __( 'Euros (€)', 'easy-digital-downloads' ),
    // тут куча валют еще
         'TRY'  => __( 'Turkish Lira (₺)', 'easy-digital-downloads' ),
         'RIAL' => __( 'Iranian Rial (﷼)', 'easy-digital-downloads' ),
         'RUB'  => __( 'Russian Rubles', 'easy-digital-downloads' )
       );
    
       return apply_filters( 'edd_currencies', $currencies );
    }
    Применям фильтр, регистрирум UAH, все хорошо.

    Есть также функция добавления символа валюты, чтоб было не 100 UAH, а 100 грн.

    Код:
    function edd_currency_symbol( $currency = '' ) {
    //  debugbreak();
       if ( empty( $currency ) ) {
         $currency = edd_get_currency();
       }
    
       switch ( $currency ) :
         case "GBP" :
           $symbol = '£';
           break;
         case "BRL" :
           $symbol = 'R$';
           break;
         case "EUR" :
           $symbol = '€';
           break;
         case "USD" :
         case "AUD" :
         case "NZD" :
         case "CAD" :
         case "HKD" :
         case "MXN" :
         case "SGD" :
           $symbol = '$';
           break;
         case "JPY" :
           $symbol = '¥';
           break;
         default :
           $symbol = $currency;
           break;
       endswitch;
    
       return apply_filters( 'edd_currency_symbol', $symbol, $currency );
    }
    как видно функция назначает уже многим валютам символы валют, а за счет хука edd_currency_symbol() можно и свой прицепить. Если хук не использовать, то символ будет как название зарегистрированной валюты.
    Ок. символ мы добавили.
    А вот дальше для вывода используется функция форматирования, ну чтоб показать валюту справа или слева от цены, в зависимости от настроек. вот ее код

    Код:
    function edd_currency_filter( $price = '', $currency = '' ) {
       if( empty( $currency ) ) {
    
         $currency = edd_get_currency();
    
       }
    
       $position = edd_get_option( 'currency_position', 'before' );
    
       $negative = $price < 0;
    
       if( $negative ) {
         $price = substr( $price, 1 ); // Remove proceeding "-" -
       }
    
       $symbol = edd_currency_symbol( $currency );
       
    
       if ( $position == 'before' ):
         switch ( $currency ):
           case "GBP" :
           case "BRL" :
           case "EUR" :
           case "USD" :
           case "AUD" :
           case "CAD" :
           case "HKD" :
           case "MXN" :
           case "NZD" :
           case "SGD" :
               
             $formatted = $symbol . $price;
             break;
           default :
             $formatted = $currency . ' ' . $price;
             break;
         endswitch;
         $formatted = apply_filters( 'edd_' . strtolower( $currency ) . '_currency_filter_before', $formatted, $currency, $price );
       else :
         switch ( $currency ) :
           case "GBP" :
           case "BRL" :
           case "EUR" :
           case "USD" :
           case "AUD" :
           case "CAD" :
           case "HKD" :
           case "MXN" :
           case "SGD" :
                 $formatted = $price . $symbol;
             break;
           default :
             $formatted = $price . ' ' . $currency;
             break;
         endswitch;
         $formatted = apply_filters( 'edd_' . strtolower( $currency ) . '_currency_filter_after', $formatted, $currency, $price );
       endif;
    
       if( $negative ) {
         // Prepend the mins sign before the currency sign
         $formatted = '-' . $formatted;
       }
    
       return $formatted;
    } 
    то есть если валюта в списке ( "GBP" ,"BRL" , "EUR", "USD","AUD" , "CAD" ,"HKD", "MXN", "SGD")

    будет использоваться символ валюты , для всех остальных название, в моем случае UAH - название и пофиг, что символ добавлен другой. Собственно эту мысль я и пытаюсь донести до разработчика. Что вот эта строка в функции форматирования
    Код:
    default :
             $formatted = $price . ' ' . $currency;
    
    Не позволяет нормально использовать фильтр по добавлению своих символов если валюта не в списке указанном выше.
    Но то ли я не прав, то ли мой гугло-переведенный аглицкий не очень хорош, но разработчик упорно не замечает проблему и говорит, что внесение этих изменений нарушит работу существующих сайтов. Каким образом, это нарушит? Я вообще считаю, что все эти кейсы в функции форматирования лишние.
    Вот моя переписка с ним. https://wordpress.org/support/topic/the-problem-of-using-edd_currency_symbol-filter?replies=7

    В итоге символ добавить можно, так как есть фильтр в самой функции форматирования, но это уже надо делать для каждой валюты. Фуф...

    Вот такая история. Если у кого есть желание, посмотрите свежим взглядом на проблему и вынесите вердикт. И если я все таки прав, то буду благодарен если вы напишите правильные аглицкие слова там на форуме в мою защиту. Если я не прав, приму и это, я не гордый. Спасибо за внимание :)
     
  2. searchingman

    searchingman Местный

    Сообщения:
    1.634
    Симпатии:
    553
    Баллы:
    113
    ИМХО: Убеждать кого-то в чем-то, тем более коллективно неблагодарное занятие.
    Учитывая, что плагин бесплатный, то убеждать его в решении каких-то задач не имеет смысла.
    Плагином автора пользуются более 40 000 человек.
    У плагина около 214 открытых задач (из них в статусе bug находится 67).
    Судя по переписке автор Вас понял, но не считает нужным заниматься вашей задачей.
     
  3. joy66

    joy66

    Сообщения:
    76
    Симпатии:
    13
    Баллы:
    8
    К коллективным наездам я не призывал. Мне в принципе достаточно осознания того, что я не ошибся, что свою мысль донес правильно и меня поняли.
    И исходил я из благих намерений. А, не считает, значит не считает ))
    Вам за участие спасибо!