-1

カスタム フィールドに基づいて Wordpress の投稿を並べ替えるために使用されるプラグインがあります。このフィールドは価格フィールドです。このプラグインは、ユーロと米ドルを使用するすべての国で完全に機能します。ユーロを使用しているが、セントを定義する特殊文字を使用しているオランダ出身のクライアントがいます。これらの特殊文字はプラグインにレンチを投げ込み、ソート エラーを引き起こしています。

取得して価格でソートする MySQL コードは次のとおりです。

function price_sort_it() {
global $wpdb, $thisorder;

    if($thisorder == 'price-lowest') {
        $this_order = 'ASC';
    }
    else if($thisorder == 'price-highest') {
        $this_order = 'DESC';
    }

return "(SELECT CAST(REPLACE(REPLACE(REPLACE($wpdb->postmeta.meta_value, ',', ''), '€',''),' ','') AS SIGNED)
           FROM $wpdb->postmeta
          WHERE $wpdb->posts.ID = $wpdb->postmeta.post_id
            AND $wpdb->postmeta.meta_key = 'ad_price')" . $this_order;
}
add_filter('posts_orderby', 'price_sort_it');

このコードは、並べ替えの前に、3 桁のコンマ区切り記号を削除し、通貨記号も削除します。それは完璧に動作します。

問題は、オランダのクライアントが次のような価格の広告を掲載していることです。

  • €5
  • €5、-
  • €5,00

次のような通常の値とともに:

  • 10,000ユーロ
  • €500.29
  • €10

コンマは小数を表し、コンマとマイナス記号は小数と 2 つのゼロの省略形を表します。

この偉業に取り組む方法についての賢明な言葉はありますか?

4

1 に答える 1

2

クライアントの数値形式が「通常の」形式ではないと説明しています。これは私にとって初めての警鐘です。

特定の場所にポイントまたはコンマを使用して数値をフォーマットすることについて、「通常」またはそれ以外のことは何もありません。国によって書式設定の規則が異なります。実際、ほとんどの国では、小数点文字としてコンマを使用し、千単位の区切り文字としてポイントを使用しています。これは事実上すべての大陸ヨーロッパ諸国に当てはまります。

したがって、好みのフォーマットを「通常」と見なさないでください。クライアントは、それらの書式設定を正常であると見なし、あなたの書式設定を奇妙なものと見なします。そして、その対価を支払うのはクライアントです。

number_format()これを処理する標準的な方法は、プログラム内でフォーマットされていないすべての数値を処理し、PHP の関数を使用してクライアントが必要とするフォーマットで表示することです。

例えば:

$number_in_dutch_format = number_format($unformatted_number, 2, ',', '.');

コンマとポイントを変数に入れることができるので、プログラムで構成可能にすることができるので、各顧客は好みのフォーマットを使用できます。

より複雑な書式設定が必要な場合は、 などの関数sprintf()も役立つ場合があります。

ただし、指定する必要があるのは、特定のクライアントに対して 1 つの形式に固執する必要があるということです。

この件に関する他の質問を SO で読むこともできます: PHP: ロケール対応の数値形式

それが役立つことを願っています。

于 2012-08-13T20:39:05.640 に答える