WooCommerceで「セール」を「SALE」に変更する方法

WooCommerceで、セール価格を設定すると、日本語で「セール」と表示されますが色々な理由で「SALE」って表示したい時ってありますよね。なのでその方法をメモしておきます。

結論(分かってる人向け)

フィルターフック「woocommerce_sale_flash」を使います。引数は「$html、$post、$product」です。

具体的方法

テーマフォルダ内の functions.php に以下のコードを追加します。

// 「セール」を「SALE」に変更
add_filter('woocommerce_sale_flash', function ($html, $post, $product) {
	return '<span class="onsale">SALE</span>';
}, 10, 3);

解説

WordPressの「add_filter」は、フィルターと呼ばれていて、WordPressから出力される様々な文字列を変更したり、機能を拡張・変更するために用意された仕組みです。フィルタを適用するために自作の関数を定義可能です。プラグインやテーマから出力されるデータやデフォルトの動作を変更し、自分のニーズに合わせた最適な実装を行うことができます。

引数は次のような意味があります。

  • 第1引数「’woocommerce_sale_flash’」:フィルタリングを行う情報の種類を指定します。これは、「フィルターフック」と呼ばれています。処理を行う時にフック(引っかかり)を作っておいて、そこで変更するイメージです。WordPressやWooCommerceには、出力を改造できるように、あらかじめ多くのフィルターフックが用意されています。
  • 第2引数「function($html,$post,$product) {・・・}」:挙動を変更する関数です。カスタム関数と呼ばれています。カスタム関数がどのような引数を取るかは、フィルターフックごとに異なります。多くの場合監修的に1つ目の引数に出力前のHTMLが格納されて、それ以降にHTML改変に必要になりそうな補助的な情報(今回は$postと$productオブジェクト)が格納されます。
  • 第3引数「10」:フィルタの優先順位です。フィルタは多種多様な所で使われていて、WordPressやWooCommerce内部のほか、テーマやプラグインの中でも使われています。そして、一つのフィルターフックに複数のフィルタが設定されている場合には、この第3引数の数値が小さい順に実行されます。慣習的に10より小さい値はシステム本体側で使って、10以降の値をテーマ・プラグインで使うことになっています。数値が大きいほど後で実行されるので、他のプラグインなどと競合する場合には、10よりも大きい整数を設定します。いくらでも大きい整数を設定できるかと言うとそうではなくて、PHPではシステムごとに扱える整数に上限があります。グローバル「PHP_INT_MAX」を使えば最高の優先度でフィルタを実行できますが、後でもっと優先させたいことが出て来た時に困るのであまり使わないほうが良いと思います。
  • 第4引数「3」:第2引数のカスタム関数に渡す引数の数です。今回は「$html,$post,$product」なので3つです。

その他

引数$postや$productオブジェクトを使えば、もっと細かく「商品のカテゴリーが新着の時は「セール」じゃなくて「特別セール」にする」とか「商品名に「関西」って入ってる場合は「セール中やねん!」にする」など、色々細かい挙動に経納することもできます。

質問・コメントなどあると嬉しいです