usces_filter_incart_checkで返すエラーが表示されない(続)
-
投稿者投稿
-
2025年12月15日 7:09 AM #103989
Alicia
参加者関連トピック usces_filter_incart_checkで返すエラーが表示されない
いつもお世話になっております。
次のトピックに関連するかもしれませんが、
SKUに/や-の記号が含まれていると数量更新ができないusces_filter_incart_checkでは、コロン(:) もダメでした。
Welcart 2.11.25 usc-e-shop/functions/template_func.php 3709~ function usces_singleitem_error_message( $post_id, $skukey, $out = '' ) { if ( ! isset( $_SESSION['usces_singleitem']['error_message'][ $post_id ][ $skukey ] ) ) { $ret = ''; ///////////////// ← SKUコードに コロン(:)が含まれていると、エラーメッセージが表示されずこの行を通りました。 } else { $ret = $_SESSION['usces_singleitem']['error_message'][ $post_id ][ $skukey ]; } if ( 'return' === $out ) { return wel_esc_script( $ret ); } else { wel_esc_script_e( $ret ); } }一応、マニュアルを確認したのですが、現状では、
SKUコード(必須)
半角英数で作成してください。空白文字を含めるのは推奨いたしません。
ハイフン(-)、アンダースコア(_) 、コロン(:)は利用可能です。
重複のないユニークなコードが必要です。同一商品内で同じSKUコードを使用することはできません。コードの付け方にルールはありませんが、あまり長くなり過ぎると改行したりして見栄えが悪くなります。となっていました。
お忙しいところ恐れ入りますが、ご確認いただけますと幸いです。
よろしくお願いいたします。//////////////////////////////////
テスト環境
WordPress のバージョン:6.8.3
Welcart のバージョン:2.11.25
PHP のバージョン:8.2.28
Welcart専用の拡張プラグインとバージョン:WCEX SKU Select 1.4.7
ご利用の親テーマとバージョン : Welcart Basic 1.8.8
ご利用の子テーマとバージョン : なし
症状を確認したブラウザ: Chrome (Win)
サーバー【重要】:シンクラウド株式会社 シン・レンタルサーバー ベーシック
//////////////////////////////////以下、yskysmr 様より引用
Alicia 様
いつもありがとうございます。
まず、大変恐縮ですが、投稿主様の症状と同じではあると思いますが、おそらく利用しているWelcartのバージョンが異なると思います。可能でしたら、新たに投稿を作成していただけますよう、お願いいたします。お問い合わせの内容につきまして、そもそも
usces_filter_incart_checkフックのリファレンスの用意がありませんでした。大変申し訳ありません。早急に作成して公開いたします。
(追記:公開いたしました。)
usces_filter_incart_checkフックの第3引数の$skuですが、使用するときに、urldecodeをしてみていただけますでしょうか。$mes[ $post_id ][ urldecode( $sku ) ] .= ‘エラーメッセージ’;フックの引数として渡すときにデコード済みの値を渡すように修正することは影響が大きいので、今のところ対応の予定はありません。
お手数ですが、お試しくださいませ。2025年12月15日 7:28 AM #103991Alicia
参加者yskysmr 様
いつも大変お世話になりありがとうございます。
また、この度は丁寧なリファレンスまで作成いただきまして誠にありがとうございました。お陰様で、
urldecode($sku)で試しましたところ、(:)コロンは、ちゃんとメッセージが表示できるようになりました。ありがとうございます。usces_filter_incart_checkでは、過去にWelcart 本体にデフォルトで存在する、在庫チェックやオプションチェックなどの $mes にもカスタマイズをしておりまして、エラーメッセージを追加( $mes .= )しただけでなく、元々の$mesを変更するために初期化( $mes = array(); )からスタートして、元々のコードをなぞるように書いて部分的にカスタマイズしていました。この場合、(:)コロンを使う場合、他の $mes も変更した方がよろしいのでしょうか?
例
デフォルトで存在する、在庫チェックのエラーメッセージ
$mes[ $post_id ][ $sku ] = __( 'enter the correct amount', 'usces' ) . '<br />';
オプションチェック用のエラーメッセージ
$mes[ $post_id ][ $sku ] .= sprintf( __( 'Chose the %s', 'usces' ), urldecode( $value ) ) . '<br />
など
上記に対しても修正が必要でしょうか?
例えば
$mes[ $post_id ][ urldecode( $sku ) ] = __( 'enter the correct amount', 'usces' ) . '<br />';
あるいは、デフォルトのコード内に$sku_code = urldecode( $sku );が存在しましたので、
$mes[ $post_id ][ $sku_code ] = __( 'enter the correct amount', 'usces' ) . '<br />';
でも問題ないのかと思います。
これらは、実際には、PHPのエラーが出る前に JavaScript のエラーが先に出るので、テスト段階でも詳しく確かめることはできないでおりました。この(:)コロン問題は、JavaScript のエラー表示に任せておけば、PHP側のエラー表示は特に気にする必要もないでしょうか?それとも、JavaScript 側にも修正が必要なのでしょうか?
それから、実は、
urldecode()については、当初から目星をつけてテストをしていたのですが、想定通りに動いてくれない部分があり、自分の拙いコーディングを何度も疑ってやり直し七転八倒しておりました。
お陰様で、原因の1つは、今回、ご指摘いただいたurldecode()だと確定しました。
これでも直らない部分があり、今では複合的な原因があるように感じております。その直らない部分といいますのは、WCEX SKUセレクトを有効化し、SKUセレクト用のSKUを作成していましたところ、SKUの登録順で1番目のSKUをカートに入れるときにはエラーメッセージが出現しましたが、2番目以降のSKUをカートに入れる時にはエラーメッセージが出現しないというものです。
具体的に作りたいものは、特定の商品ページに複数のSKU作り、各々のSKUを排他的にしか購入できないようにするものです。今回、コロンの問題を排除できたものの、それでもこの部分はうまくいきませんでした。
そこで確認なのですが、
Welcart Basic ver.1.8.8 wc_templates/wc_sku_select.php 133 <div class="error_message"><?php usces_singleitem_error_message( $post->ID, usces_the_itemSku( 'return' ) ); ?></div>wc_sku_select.php においても、「シングルアイテムエラーメッセージ」という関数名となっておりますが、共通という理解で合ってますでしょうか?(sku select 用のエラーメッセージ取得関数は存在しますか?)
今回初めて、商品情報編集ページでSKUセレクト用のSKU を使用しないで複数SKUをばらして作成すると、自分のコードでも、すべてのSKUで
$mesメッセージを表示できることに気づきました。usces_singleitem_error_message()では、WCEX SKU Select に対応できないのでしょうか?もしかして、
usces_filter_incart_checkのコーディングを工夫すれば、何とかなるものでしょうか?お手数をお掛けいたしますが、ご確認いただけますと幸いです。
よろしくお願いいたします。2025年12月15日 6:23 PM #103993
yskysmrキーマスターAlicia 様
お世話になっております。
中途半端なリファレンスや、SKUコードをURLエンコード(&URLデコード)するところとしないところを厳密に公開していないこともあり、ご理解いただくにあたり多大なご負担をおかけしていること、大変申し訳ありません。
未だにリファレンスにまで手が回らず、こうしてお問い合わせをいただいてやっと、対応するのが精一杯でございます。遅くなりまして申し訳ありません。お問い合わせに回答させていただきます。
この場合、(:)コロンを使う場合、他の $mes も変更した方がよろしいのでしょうか?
はい、
usces_filter_incart_checkフックでキーとしてセットする $sku は urldecode() を行ってください。デフォルトで存在する、在庫チェックのエラーメッセージ
こちらにつきましては、社内で確認させていただきます。おそらくご指摘のとおり、JavaScript 側でチェックされるため表面化されなかったと思われます。
その直らない部分といいますのは、WCEX SKUセレクトを有効化し、SKUセレクト用のSKUを作成していましたところ、SKUの登録順で1番目のSKUをカートに入れるときにはエラーメッセージが出現しましたが、2番目以降のSKUをカートに入れる時にはエラーメッセージが出現しないというものです。
こちらは実は、別の原因となります。ご指摘のとおり複数SKUの商品で選択できる最初のSKU以外でエラーメッセージを表示したくても、メッセージは表示されません。
別の原因というのは、カート投入クリック→サーバサイドチェック不可でエラーメッセージ表示→商品ページを再表示のとき、WCEX SKU Select の商品ページは最初のSKUを選択しなおして表示します。
このとき、選択した(エラーメッセージを出したい)SKUが最初のSKUに置き換わってしまうため、エラーメッセージも最初のSKUのものを表示しようとしているのです。
こちらは WCEX SKU Select の既知の不具合でして、この挙動をどのように修正するかは、まだ検討段階で、修正の見込みが立っておりません。
この件に関しましては、Welcart 本体および WCEX SKU Select の修正になるかと思います。ご不便をおかけして申し訳ありませんが、ご了承くださいますよう、お願いいたします。2025年12月15日 9:23 PM #103994Alicia
参加者yskysmr 様
お忙しいところ、ご回答いただきましてありがとうございました。リファレンスの方もご負担になってしまい申し訳ありません。感謝しかありません。
ご回答いただきました、
urldecode()の件は、デフォルトのメッセージすべてに修正を加えます。ありがとうございます。そして
このとき、選択した(エラーメッセージを出したい)SKUが最初のSKUに置き換わってしまうため、エラーメッセージも最初のSKUのものを表示しようとしているのです。
を読ませてもらったとき、自分が感じていた違和感はこれだったのだと妙に腑に落ちました。
私は、このような排他制御カスタマイズを試みるとき、第一段階の
incart_checkで弾いて、その後のお客様情報ページでログインされたお客様に関しては、過去の購入履歴のSKUをすべてチェックして、最終的にdelivery_checkでも弾くことにしています。
ですので、現状では、SKU Select で見栄えを優先する方向にしようかなと考えています。incart_checkでの SKU Select を使った排他制御は、当面の間、お蔵入りにします。SKUに関しましては、
['size']['weight']['pict_id']など今後の Welcart の発展を期待させるものが予約されており、ワクワクしております。今後ともよろしくお願いいたします。このトピックは、クローズでお願いします。
この度は、お世話になり、誠にありがとうございました。
-
投稿者投稿
- このトピックに返信するにはログインが必要です。
PAGE TOP