значение формата хранится в виде простого текста в виде денег с использованием value_format - PullRequest
1 голос
/ 17 октября 2019

Я пытаюсь изменить плагин php wp для форматирования выходного значения $ как денег, используя valuemoney_format ('% i', $ value). "\ n";

Я пробовал

setlocale(LC_MONETARY, 'en_GB');
function format_value_money($value){
return valuemoney_format('%i', $value) . "\n";
}

и

$atts['placeholder'] = valuemoney_format('%i', $value) . "\n";

, а также

<span class="wpcf7-form-control-wrap %1$s"><input id="%5$s" oninput="output%5$s.value=%5$s.value" %2$s />%3$s</span><output class="contactform7-output" name="%1$s" id="output%5$s" for="%5$s">'%i'%4$s . "\n"</output>

значение форматируется какобычный текст (10000) и хотел бы показать значение в формате валюты (1000 фунтов стерлингов) или (1000 фунтов стерлингов)

<?php
    function wpcf7_range_slider_extender_handler ( $tag ) {
        $tag = new WPCF7_FormTag( $tag );
        if ( empty( $tag->name ) ) {
            return '';
        }
        $validation_error = wpcf7_get_validation_error( $tag->name );
        $class = wpcf7_form_controls_class( $tag->type );
        $class .= ' wpcf7-validates-as-number';
        if ( $validation_error ) {
            $class .= ' wpcf7-not-valid';
        }
        $atts = array();
        $atts['class'] = $tag->get_class_option( $class );
        $atts['id'] = $tag->get_id_option();
        $atts['tabindex'] = $tag->get_option( 'tabindex', 'int', true );
        $atts['min'] = $tag->get_option( 'min', 'signed_int', true );
        $atts['max'] = $tag->get_option( 'max', 'signed_int', true );
        $atts['step'] = $tag->get_option( 'step', 'int', true );
        if ( $tag->has_option( 'readonly' ) ) {
            $atts['readonly'] = 'readonly';
        }
        if ( $tag->is_required() ) {
            $atts['aria-required'] = 'true';
        }
        $atts['aria-invalid'] = $validation_error ? 'true' : 'false';
        $value = (string) reset( $tag->values );
        if ( $tag->has_option( 'placeholder' ) || $tag->has_option( 'watermark' ) ) {
            $atts['placeholder'] = $value;
            $value = '';
        }
        $value = $tag->get_default_option( $value );
        $value = wpcf7_get_hangover( $tag->name, $value );
        $atts['value'] = $value;
        if ( wpcf7_support_html5() ) {
            $atts['type'] = $tag->basetype;
        } else {
            $atts['type'] = 'text';
        }
        $atts['name'] = $tag->name;
        $atts = wpcf7_format_atts( $atts );

        $html = sprintf(
            '<span class="wpcf7-form-control-wrap %1$s"><input id="%5$s" oninput="output%5$s.value=%5$s.value" %2$s />%3$s</span><output class="contactform7-output" name="%1$s" id="output%5$s" for="%5$s">%4$s</output>',
            sanitize_html_class( $tag->name ), $atts, $validation_error, $value,  sanitize_tag_name( $tag->name ));
        return $html;

1 Ответ

0 голосов
/ 17 октября 2019

Вы практически уже там. На ум приходят две вещи:

Во-первых: я не знаю, определяет ли wordpress valuemoney_format, предоставленная php функция по умолчанию - money_format.
Во-вторых: у вас естьчтобы убедиться, что локаль, которую вы хотите установить с помощью set_locale, определена на машине. Вы можете проверить это, выполнив locale -a | grep LOCALE в терминале и проверив список вывода.

В моем случае en_GB является / не определен, но en_GB.utf8 является.

Примерpsysh -Сессия:

>>> function format_value_money($value){
        return money_format('%i', $value) . "\n";
    }
>>> setlocale(LC_ALL, 'en_GB');
=> false
>>> setlocale(LC_ALL, 'en_GB.utf8');
=> "en_GB.utf8"
>>> format_value_money(1000);
=> "GBP1,000.00\n"

Проверьте локаль:

❯ locale -a | grep en_GB
en_GB.utf8

Еще один вопрос: Вы уверены в %i? Это международный формат, в результате префикс GBP в приведенном выше примере. Если вместо этого вы используете %n, то в Великобритании более приемлемым и ожидаемым будет "£1,000.00\n" отформатированное значение.

Добавление: если вам нужно создать языковой стандарт, выполните следующие действия:

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