Вводная часть. (простите , что букв будет много)
Есть плагин Easy Digital Downloads. Замечательная штука для продажи цифровых товаров.
Возник тут вопрос на форуме, как добавить украинскую гривну и чтоб цена отображалась как 100 грн.
В качестве уже зарегистрированных валют нет UAH . Но разработчик предусмотрел возможность регистрировать доп. валюты фильтром edd_currencies
Применям фильтр, регистрирум UAH, все хорошо.
Есть также функция добавления символа валюты, чтоб было не 100 UAH, а 100 грн.
как видно функция назначает уже многим валютам символы валют, а за счет хука edd_currency_symbol() можно и свой прицепить. Если хук не использовать, то символ будет как название зарегистрированной валюты.
Ок. символ мы добавили.
А вот дальше для вывода используется функция форматирования, ну чтоб показать валюту справа или слева от цены, в зависимости от настроек. вот ее код
то есть если валюта в списке ( "GBP" ,"BRL" , "EUR", "USD","AUD" , "CAD" ,"HKD", "MXN", "SGD")
будет использоваться символ валюты , для всех остальных название, в моем случае UAH - название и пофиг, что символ добавлен другой. Собственно эту мысль я и пытаюсь донести до разработчика. Что вот эта строка в функции форматирования
Не позволяет нормально использовать фильтр по добавлению своих символов если валюта не в списке указанном выше.
Но то ли я не прав, то ли мой гугло-переведенный аглицкий не очень хорош, но разработчик упорно не замечает проблему и говорит, что внесение этих изменений нарушит работу существующих сайтов. Каким образом, это нарушит? Я вообще считаю, что все эти кейсы в функции форматирования лишние.
Вот моя переписка с ним. https://wordpress.org/support/topic/the-problem-of-using-edd_currency_symbol-filter?replies=7
В итоге символ добавить можно, так как есть фильтр в самой функции форматирования, но это уже надо делать для каждой валюты. Фуф...
Вот такая история. Если у кого есть желание, посмотрите свежим взглядом на проблему и вынесите вердикт. И если я все таки прав, то буду благодарен если вы напишите правильные аглицкие слова там на форуме в мою защиту. Если я не прав, приму и это, я не гордый. Спасибо за внимание
Есть плагин 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 );
}
Есть также функция добавления символа валюты, чтоб было не 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
В итоге символ добавить можно, так как есть фильтр в самой функции форматирования, но это уже надо делать для каждой валюты. Фуф...
Вот такая история. Если у кого есть желание, посмотрите свежим взглядом на проблему и вынесите вердикт. И если я все таки прав, то буду благодарен если вы напишите правильные аглицкие слова там на форуме в мою защиту. Если я не прав, приму и это, я не гордый. Спасибо за внимание