やりたいこと
welcartで会員登録時・購入時のお客様情報から住所の必須を外したい。
やったことと質問内容
https://analyzegear.co.jp/blog/1207
上記の記事で任意項目を必須にする方法は見つかりました。
こちらを参考に、
usces_filter_member_check
usces_filter_customer_check
このフックを使用することで必須のコントロールをすることができそうなのですが、デフォで必須になっている項目(今回は住所)を任意にする方法がわかりませんでした。
プラグインファイルのclasses/usceshop.class.php
の中のfunction member_check()
を参考に、とりあえず試しに郵便番号を任意にしようと思い、
php
1add_filter('usces_filter_member_check_fromcart', 'my_filter_customer_check', 10); 2add_filter('usces_filter_member_check', 'my_filter_customer_check', 10); 3function my_filter_customer_check() { 4 $zip_check = false; 5}
この内容でfunctions.phpに書いてみたところ、郵便番号以外も全て任意になってしまいました。
チェックがこの内容で上書きされるため、全て任意になってしまったと推測し、一旦前述のfunction member_check()
の中身をそのままコピペしてみたところ、class内の記述のため$this
が使われており、そこの対処方法がわかりませんでした。
usceshop.class.php
を直接編集して該当項目を消す等をすれば対応できそうなのですが、できればプラグインファイルを直接触ることはしたくないため、フックで対応を進めたいです。
function member_check()の中身
php
1function member_check() { 2 do_action( 'usces_action_before_member_check' ); 3 4 $mes = ''; 5 $usces_member_old = $_SESSION['usces_member']; 6 foreach ( $_POST['member'] as $key => $vlue ) { 7 if( 'password1' !== $key && 'password2' !== $key ){ 8 $_SESSION['usces_member'][$key] = trim($vlue); 9 } 10 } 11 if( $_POST['member_regmode'] == 'newmemberform' || ($_POST['member_regmode'] === 'editmemberform' && !( WCUtils::is_blank($_POST['member']['password1']) && WCUtils::is_blank($_POST['member']['password2']))) ){ 12 $mes = $this->get_pwd_errors($_POST['member']['password1']); 13 } 14 15 if ( $_POST['member_regmode'] == 'editmemberform' ) { 16 if ( trim($_POST['member']['password1']) != trim($_POST['member']['password2']) ) { 17 $mes .= __('Password confirm does not match.', 'usces') . "<br />"; 18 } 19 if ( !is_email($_POST['member']['mailaddress1']) || WCUtils::is_blank($_POST['member']['mailaddress1']) ) { 20 $mes .= __('e-mail address is not correct', 'usces') . "<br />"; 21 } else { 22 $this->get_current_member(); 23 $mem_id = $this->current_member['id']; 24 $id = $this->check_member_email( $_POST['member']['mailaddress1'] ); 25 if( !empty( $id ) && $id != $mem_id ) { 26 $mes .= __( 'This e-mail address can not be registered.', 'usces' ) . "<br />"; 27 } 28 } 29 } else if ( $_POST['member_regmode'] == 'newmemberform' ){ 30 if ( trim($_POST['member']['password1']) != trim($_POST['member']['password2']) ) { 31 $mes .= __('Password confirm does not match.', 'usces') . "<br />"; 32 } 33 if ( !is_email($_POST['member']['mailaddress1']) || WCUtils::is_blank($_POST['member']['mailaddress1']) || WCUtils::is_blank($_POST['member']['mailaddress2']) || trim($_POST['member']['mailaddress1']) != trim($_POST['member']['mailaddress2']) ) { 34 $mes .= __('e-mail address is not correct', 'usces') . "<br />"; 35 } else { 36 $id = $this->check_member_email( $_POST['member']['mailaddress1'] ); 37 if( !empty( $id ) ) { 38 $mes .= __( 'This e-mail address can not be registered.', 'usces' ) . "<br />"; 39 } 40 } 41 }else{ 42 $mes .= __('ERROR: I was not able to complete collective operation', 'usces') . "<br />"; 43 } 44 if ( WCUtils::is_blank($_POST["member"]["name1"]) ){ 45 $mes .= __('Name is not correct', 'usces') . "<br />"; 46 } 47 $zip_check = false; 48 $addressform = $this->options['system']['addressform']; 49 $applyform = usces_get_apply_addressform($addressform); 50 if ( $applyform === "JP") { 51 if ( isset( $_POST["member"]["country"] ) ) { 52 if ( $_POST["member"]["country"] === "JP") { 53 $zip_check = true; 54 } 55 } else { 56 $base = usces_get_base_country(); 57 if ( $base === "JP") { 58 $zip_check = true; 59 } 60 } 61 } 62 $zip_check = apply_filters( 'usces_filter_zipcode_check', $zip_check ); 63 if ( WCUtils::is_blank($_POST["member"]["zipcode"]) ) { 64 if ( usces_is_required_field('zipcode') ) { 65 $mes .= __('postal code is not correct', 'usces') . "<br />"; 66 } 67 } else { 68 if ( $zip_check ) { 69 if (!preg_match("/^[a-zA-Z0-9]+$/", $_POST["member"]["zipcode"] ) ) { 70 $_SESSION['usces_member']["zipcode"] = usces_convert_zipcode($_POST["member"]["zipcode"]); 71 } 72 if (!preg_match('/^(([0-9]{3}-[0-9]{4})|([0-9]{7}))$/', $_SESSION['usces_member']["zipcode"])) { 73 $mes .= __('postal code is not correct', 'usces') . "<br />"; 74 } 75 } 76 } 77 if ( $_POST["member"]["pref"] == __('-- Select --', 'usces_dual') && usces_is_required_field('states') ){ 78 $mes .= __('enter the prefecture', 'usces') . "<br />"; 79 } 80 if ( WCUtils::is_blank($_POST["member"]["address1"]) && usces_is_required_field('address1') ){ 81 $mes .= __('enter the city name', 'usces') . "<br />"; 82 } 83 if ( WCUtils::is_blank($_POST["member"]["address2"]) && usces_is_required_field('address2') ){ 84 $mes .= __('enter house numbers', 'usces') . "<br />"; 85 } 86 if ( WCUtils::is_blank($_POST["member"]["tel"]) && usces_is_required_field('tel') ){ 87 $mes .= __('enter phone numbers', 'usces') . "<br />"; 88 } 89 if( !WCUtils::is_blank($_POST['member']["tel"]) && preg_match("/[^\d\-+]/", trim($_POST["member"]["tel"])) && usces_is_required_field('tel') ){ 90 $mes .= __('Please input a phone number with a half size number.', 'usces') . "<br />"; 91 } 92 93 if( $_POST['member_regmode'] !== 'editmemberform' && isset( $this->options['agree_member']) && 'activate' === $this->options['agree_member'] ){ 94 if( !isset($_POST['agree_member_check']) ){ 95 $mes .= __('Please accept the membership agreement.', 'usces') . "<br />"; 96 } 97 } 98 99 $mes = apply_filters('usces_filter_member_check', $mes); 100 101 if ( $_POST['member_regmode'] == 'editmemberform' && '' != $mes ) { 102 $_SESSION['usces_member'] = $usces_member_old; 103 } 104 105 return $mes; 106 }
バージョン情報
- PHP 7.4
- WordPress 6.1.1
- Welcart e-Commerce 2.8.11
- 使用テーマ:EGO for Welcart(バージョン: 1.7)
2/11追記
丸投げになってしまっていたため、質問内容を変更しました。
必須さえ外れれば後は項目を消すだけになるので、必須の外し方をご教授いただければ幸いです。

回答2件
あなたの回答
tips
プレビュー