• Вопрос без рабочей ссылки на проблему считается риторическим. Без ссылки и скриншота - провокацией!

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

Image CMS

joy66

Форумчанин
#1
Вводная часть. (простите , что букв будет много)
Есть плагин 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

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

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

searchingman

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

joy66

Форумчанин
#3
К коллективным наездам я не призывал. Мне в принципе достаточно осознания того, что я не ошибся, что свою мысль донес правильно и меня поняли.
И исходил я из благих намерений. А, не считает, значит не считает ))
Вам за участие спасибо!