ワイヤード・パンチ

元・大阪人が、岡山の山奥でも生きていけることを証明するためのブログ。

Osclassで価格の欄に数字以外を入れられるようにしたいけど、実現不能?

Osclassで広告を投稿する際、価格も入力する必要があるのですが、入れられる値は数字のみとなっています。

しかし、「○個で○円」など、日本語テキストを入れられるようにもしてほしいと指示されました。

ただ、それを実現しようといろいろいじってみましたが、結局は厳しそうです。

広告

そもそも数値以外を入力できない。

価格のフォーム自体には日本語も入力可能なのですが、保存直前に値が適切ではないと弾かれてしまいます。

((!osc_validate_number($aItem['price'])) ? _m("Price must be a number.") . PHP_EOL : '' ) .

よって、「\oc-includes\osclass\ItemActions.php」を開いて、判定を行う上記の部分をコメントアウトしてもう一度、保存を実行。

弾かれることはなくなりましたが、数値以外は空になって保存できませんでした。

数値以外は保存直前に空にされてしまう?

広告の追加処理が行われていると思われるコアファイル内にて、「item_add_prepare_data」というフックポイントが存在していました。

その周辺ではフォームの入力値を格納している配列もあったのですが、var_dumpでその中身を覗いてみると、価格に数値以外を入れたときはかならず空にされていました。

osc_add_filter("item_add_prepare_data", function ($data){
	$data["price"] = filter_input(INPUT_POST, "price");
	return $data;
});

よって、上記のコーデで価格の入力値をまた入れてあげたのですが、実際に広告が保存されると、なぜか価格が数値以外だとまた空になってしまいました。

テーブルの型が合ってない?

phpmyadminを開くと、「oc_t_item」というテーブルに、広告の投稿内容が保存されていました。

そして、価格を表す「i_price」の値の型が「bigint(20)」になっていました。

intは整数を表しているので、これじゃあ日本語が入らないのも仕方ないわけです。

というわけで型を、文字列型を表すであろう「VARCHAR」に変えて、再度投稿を行ってみました。

しかし、それでも価格に日本語を入れて保存しても、やっぱ空になってしまいました。

もうお手上げでしょうか。

カスタムフィールドで代用する。

もう、標準で用意されている価格の欄をカスタマイズするのは無理だと考えて、新たに「価格」という名のカスタムフィールドで代用することにしました。

しかしそうなると、入力画面で価格という入力欄が二重で表示されて、変な状態に見えます。

というわけで、元から存在している価格の入力フォームはコメントアウトしてしまいましょう。

<?php if( osc_price_enabled_at_items() ) { ?>
<div class="control-group control-group-price">
	<label class="control-label" for="price"><?php _e('Price', 'bender'); ?></label>
	<div class="controls">
		<?php ItemForm::price_input_text(); ?>
		<?php ItemForm::currency_select(); ?>
	</div>
</div>
<?php } ?>

テーマが「bender」の場合は、「item-post.php」から上記の部分を消します。

なお、価格の入力は必須ではないので、入力欄をコメントアウトしても保存は可能です。

ただし、この運用方法の問題点として、管理画面から標準の価格欄は消えませんし、カスタムフィールドはカテゴリを指定しないと出てこないので、投稿ページを開いた直後は価格の入力欄が無いように見えます。