フォーラムへの返信

15件の返信を表示中 - 31 - 45件目 (全488件中)
  • get_users (developer.wordpress.org)

    をみると、get_users は array での取得のため、 $user === $loginuser はマッチしないはずです。

    https://codex.wordpress.org/Database_Description#Table:_wp_users
    https://wpdocs.osdn.jp/%E9%96%A2%E6%95%B0%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9/get_userdata
    をみると
    username の取得は、 user_login になりますね。
    ので $user === $loginuser->user_login で判定したらよいのではないかなと思います。

    get_filed では、特定のフィードから値をとってきているので、ここは文字列(配列ではない)かもしれません。
    そのあたりは、var_dump($user) などでどのような値がはいっているかチェックしてみるのがよいかなぁと思います。
    $user[‘display_name’] はそもそも ACFフィードに display_name の設定と値がないとだめでしょうし、ACFではなくユーザー側の display_name を表示したいのなら、、echo $loginuser->display_name; だと思います。

    • この返信は2年、 1ヶ月前にkimipoohが編集しました。
    フォーラム: 使い方全般
    返信が含まれるトピック: Cookies がブロック

    Warning: Cannot modify header information – headers already sent by (output started at /***/wp-content/themes/agent_tcd033/functions.php:1) in /***/wp-login.php on line 462

    とあるので、テーマの functions.php のどこかがおかしくなっているのではないでしょうか。

    参考:https://ja.stackoverflow.com/questions/5453/php-%E3%81%AE-headers-already-sent-%E3%82%A8%E3%83%A9%E3%83%BC%E3%81%AF%E3%81%A9%E3%81%86%E7%9B%B4%E3%81%97%E3%81%9F%E3%82%89%E3%81%84%E3%81%84%E3%81%A7%E3%81%99%E3%81%8B

    WP Add Mime Types プラグインの開発者です。

    MW WP Form は使ったことがありませんでしたが、ソースコードを見てみますと、
    プラグインの classes/functions.php にある check_file_type 関数で添付できる拡張子チェックをしています。このチェックで一致しなければ、WordPress へのアップロード処理は実行されますが、メールへのファイル添付はされないという仕様になっています。
    そのため、WordPress が認識する、正確には PHPの finfo 関数が認識する拡張子のMIME Typeを設定する必要があります。

    dxf は text/plain
    dwg は image/vnd.dwg

    と認識していましたので、 WP Add Mime Typesでの設定は

    dxf = text/plain
    dwg = image/vnd.dwg

    とすることでメールに添付されるようになりました(手持ちのテスト環境 WordPress 5.9では)

    また WordPressが認識する MIME タイプをチェックする方法の1として、WP Add Mime Typesの機能を使うのであれば、
    https://ja.wordpress.org/plugins/wp-add-mime-types/
    上記のFAQにある「メディアからアップロードしたファイルの種類を確認する方法」を参考にしてみてください。

    • この返信は2年、 2ヶ月前にkimipoohが編集しました。

    ffftpでファイルアップロードしようとすると550エラーにあるように、 uploadsフォルダの所有権が異なっている、アクセス制限がある可能性があります。ですので、まずはサーバー運営側に相談してみるとよいかと思います。

    フォーラム: インストール
    返信が含まれるトピック: Xampp で wordpressのインストール

    他のツールでは問題ないということ、「wp_ が存在しない」エラーとなることから
    WordPress のインストールが失敗しているのではないかと思います。
    たとえば、phpmyadmin よりDBで作成した wp_ のテーブルを削除(もし存在するなら)した上で、
    wp-admin/install.php より再度インストールしてみた場合にはどうなるでしょうか。

    フォーラム: インストール
    返信が含まれるトピック: Xampp で wordpressのインストール

    目的が WordPress を手持ち端末で使いたいということであれば、
    10分で完了!WordPressのローカル環境構築なら「Local」にあるような、Localというツールをつかうという手もあります。

    フォーラム: 使い方全般
    返信が含まれるトピック: コンタクトフォーム7について

    >textやtel*、telなどはadd_filter(‘wpcf7_validate_○○○’ 
    を作成しなければいけないということでしょうか。

    このやり方をつかっている場合には、そうなるということです。
    発想の転換で、全部 text* にして、条件は全部自前で書くという手もあります。
    結局は何をどうしたいのかによって変わります。したがって最初に必要なのはシステム設計(仕様)です。
    それを決めた上で、どうプログラミングしていくかが決まります。

    またコードを書く時には、インデント(字下げ)を使って、ブロックごとに整理してみてください。
    今回のケースでは、{} (ブロック)で整理すると、 else if($name == ‘coupon2’) { の閉じカッコ(})が、return $result; あとに来てしまっています。

    wpcf7_validate_postの関数自体が return を要求しているので、 それがされない条件があるとそこでエラーになって止まってしまうということになっているようにみえます。

    <?php
    	add_filter('wpcf7_validate_text*', 'wpcf7_validate_post', 20, 2);
    	function wpcf7_validate_post($result,$tag){
    		$name = $tag['name'];
    
    		if ($name == 'coupon') {
    			$coupon = $_POST[$name];
    			if(  ! preg_match_all('/^[49][0-9]{11}([ | ][49][0-9]{11}){0,2}$/u',$coupon )){
    				$result->invalidate( $tag, 'エラーになります。1' );
    			}
    		}else if($name == 'coupon2') {
    			$coupon = $_POST[$name];
    			//if($coupon = '0000000000')
    			// if(  ! preg_match_all('/^[49][0-9]{11}([ | ][49][0-9]{11}){0,2}$/u',$coupon )){
    			//$result->invalidate( $tag, 'エラーになります。2' );
    			//ここに駄目な条件を書いて、そのときにエラーになるようにする
    			//}
    		}
    
    		return $result;		            
    	}
    ?>

    つまり、人間の目からみて、たとえば if の範囲がどこまでなのかを視覚的にわかりやすくするのがインデントです。このあたりはプログラミングの書籍などに掲載されていると思いますが、意識されるのがよいかと思います。if とか else if とか漠然としかわかっていないのであれば、初学者向けのPHPプログラミングの書籍等を一通り読んで見るのも良いと思います(何がオススメかまではわかりませんが)。

    フォーラム: 使い方全般
    返信が含まれるトピック: コンタクトフォーム7について

    さらに、現状にcouponとは別の項目で条件を追加したいときはどうしたらいいでしょうか。

    if ($name == ‘coupon’) {

    これが、[text* coupon] のときの判定です。
    text* を使っている限り、
    [text* coupon2]なら

    その条件を増やしていくことになります。
    このあたりは PHPプログラミングの範疇になってくるので、やりたいことが増えれば増えるほど、それに沿ったプログラミングが必要になります。
    text* 以外であれば、そのために別に準備が必要です。

    つまり下記のようにif の条件文についてそれ以外でもしという else if をつかうことになるでしょう。

    <?php
    	add_filter('wpcf7_validate_text*', 'wpcf7_validate_post', 20, 2);
    	function wpcf7_validate_post($result,$tag){
    		$name = $tag['name'];
    
    	        if ($name == 'coupon') {
     		    $coupon = $_POST[$name];
                        if(  ! preg_match_all('/^[49][0-9]{11}([ | ][49][0-9]{11}){0,2}$/u',$coupon )){
                             $result->invalidate( $tag, 'エラーになりました' );
                        }
     	        }else if($name == 'coupon2') {
     		    $coupon = $_POST[$name];
                        // ここに駄目な条件を書いて、そのときにエラーになるようにする
                    }
    	        return $result;		
    	}
    ?>
    フォーラム: 使い方全般
    返信が含まれるトピック: コンタクトフォーム7について

    /^[49][0-9]{11}([ | ][49][0-9]{11}){0,2}$/u

    だったらどうでしょうか。

    1. 412345678901 の最初の判定は個別にする
    2. 2つ目以降が存在するなら、先頭は半角 or 全角スペースからスタートする判定にする

    という手法です。

    フォーラム: 使い方全般
    返信が含まれるトピック: コンタクトフォーム7について

    それは ishitakaさんがご指摘の通り、 文字列を int 型に変換しているからです。
    実際に

    $str = “412345678901 412345678901 812345678901”;
    echo (int)$str;

    とすると、

    412345678901

    という値になります。
    参考:https://www.php.net/manual/ja/language.types.type-juggling.php

    つまり先頭の数字しか、数値に変換されていません。
    したがってエラーにならないということです。

    フォーラム: 使い方全般
    返信が含まれるトピック: コンタクトフォーム7について

    tel属性にすると既存のルールも有効になってしまうはず。
    つまりは 数字とハイフンなど、電話番号として認識する Contact Form 7側のルールが適用されてしまうので、駄目のように思います。
    あくまでゆるい条件のもとで、条件を追加するというような感じになるかと思います。

    正規表現チェッカーは
    http://okumocchi.jp/php/re.php
    にあるように、PHP専用のものをつかうとよいかなと思います。

    フォーラム: 使い方全般
    返信が含まれるトピック: コンタクトフォーム7について

    おおー ishitaka さんの正規表現がよさそうですね!
    私ではちょっと思いつかなかった…

    フォーラム: 使い方全般
    返信が含まれるトピック: コンタクトフォーム7について

    なるほど。

    であれば正規表現ではちょっと大変そうで思いつかないので、
    1. 全角スペースを半角スペースに置換
    2. 半角スペースごとに分けて配列に保存する
    3. もし配列の要素数が3を超えた(つまり 412345678901 412345678901 412345678901 412345678901などになった場合)場合には即座にエラー。
    4. 配列の要素数が3以下の場合は、配列ごとに
    条件1. 先頭が4,9のいずれか
    条件2. 先頭の4,9を抜いて桁数が11桁
    の条件を正規表現でチェックする

    ということで実現できるかと思います。
    コードは下記のようになるでしょう。

    add_filter('wpcf7_validate_text*', 'wpcf7_validate_post', 20, 2);
    function wpcf7_validate_post($result,$tag){
    	$name = $tag['name'];
    
    	//ここから一つ一つのフォーム項目にバリデーションを追加します。
    	if ($name == 'coupon') {
     		//your-emailという名前のフォームに対して
     		$coupon =  $_POST[$name];
     		$coupon_fix = str_replace(" ", " ", $coupon); // 全角スペースを半角スペースへ置換)
     		$coupon_fix_list = explode(" ", $coupon_fix); // 半角スペースで分けて配列に保存
     		/* 以上の時点で、
     		   412345678901 のみ = $coupon_fix_list[0]に保存
     		   412345678901 912345678902 412345678903 だと
     		      $coupon_fix_list = array(
     		        412345678901, 912345678902, 412345678903);
     		   のほうに配列に保存されている。したがってループで1つずつチェックする
    		*/
    		if(count($coupon_fix_list) > 3){ // 最大は3つまでなので、配列が3を超えたら即座にエラーとする
      					$result->invalidate( $tag, 'クーポン番号が間違っているため送信できません。' );
    		}else{
    			foreach($coupon_fix_list as $value){
     				if ( ! (preg_match('/^(4|9)[0-9]{11}$/u', $value))){
      					$result->invalidate( $tag, 'クーポン番号が間違っているため送信できません。' );
     				}
     			}
     		}
     	}
    	//ここまでが一つのフォーム項目に対して適用させるかたまり。
    	return $result;
    }
    //最後にこの部分が来るようにする。
    • この返信は2年、 5ヶ月前にkimipoohが編集しました。
    フォーラム: 使い方全般
    返信が含まれるトピック: コンタクトフォーム7について

    その場合には、tel は電話番号と認識しないものは駄目になるので、
    text で指定する必要がありますね。
    それは後でコードを掲載するとして、
    もし、
    1. 先頭が4,9のいずれか
    2. 桁数が12桁(半角、全角スペースも1桁とカウントする)
    のであれば

    /^[49][0-9\s ]{11}$/u

    が正規表現になります。\s の右側の空白は全角空白です。
    半角、全角はあくまで入る可能性があるが、数字以外カウントしないということであれば
    正規表現でやるのは面倒そうなので、全角と半角空白については正規表現で判定する前に str_replace を使って消しておきます。
    つまり 400 232 111 222 となっていた場合、判定としては 400232111222 にしてから行うということです。

    $coupon = $_POST[$name];
    $coupon_fix = str_replace(“ ”, “”, str_replace(” “, “”, $coupon) );
    if ( ! preg_match(‘/^(4|9)[0-9]{11}$/u’, $coupon_fix) ) {

    上記の場合のコードの場合には (int) によるキャストは外しておく必要があります。

    また、
    [text* coupon]
    のように tel* ではなく text* を指定した上で、 text* に対して条件設定をする必要があります。

    add_filter('wpcf7_validate_text*', 'wpcf7_validate_post', 20, 2);
    function wpcf7_validate_post($result,$tag){
    	$name = $tag['name'];
    
    	//ここから一つ一つのフォーム項目にバリデーションを追加します。
    	if ($name == 'coupon') {
     		//your-emailという名前のフォームに対して
     		$coupon =  $_POST[$name];
     		$coupon_fix = str_replace(" ", "", str_replace(" ", "", $coupon) );
     		if ( ! preg_match('/^(4|9)[0-9]{11}$/u', $coupon_fix) ) {
      			$result->invalidate( $tag, 'クーポン番号が間違っているため送信できません。' );
     		}
     		//if(!この部分はPHPで指定)は指定したい条件に当てはまらない(!)場合は
     	}
    	//ここまでが一つのフォーム項目に対して適用させるかたまり。
    	return $result;
    }
    //最後にこの部分が来るようにする。
    

    また、add_filter(‘wpcf7_validate_tel*’, ‘wpcf7_validate_post’, 20, 2);
    の20と2は何の数字なのでしょうか。

    こちらについては、20 は実行される優先度です。まぁ12でも20でもあまり変わらないので気にする必要はありませんが、デフォルトが10なので、それより大きい数字にしておくことが一般的です。10は Contact Form 7のプラグイン本体で利用されている可能性が高く、それより速く処理するとややこしいことになるためです。

    2 のほうは、関数の引数です。
    wpcf7_validate_text* はフィルターフックとして、Contact Form 7側で用意されていますが、そちらで利用できる引数が2だとよいうことです。
    つまり、
    function wpcf7_validate_post($result,$tag){
    上記 function の () の個数が $resultと$tagで2つの引数があるからということです。
    参考:https://wpdocs.osdn.jp/%E9%96%A2%E6%95%B0%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9/add_filter

    このあたりは、今回のような add_filterを使ってカスタマイズするときには、カスタマイズ対象となるテーマやプラグイン側が指定するので、それに従うということになります。

    このあたりは PHPプログラミング等の話になってくるので、wpcf7_validate については、2 に設定されているという感じになります。実際どのように設定されているかは、Contact Form 7のソースをチェックする必要があります。

    • この返信は2年、 5ヶ月前にkimipoohが編集しました。
    フォーラム: 使い方全般
    返信が含まれるトピック: コンタクトフォーム7について

    もし、
    [tel* coupon] </label>
    に対するチェックを追加したいのであれば、

    下記のようになります。
    ポイントは3点
    1. wpcf7_validate_タグ名(今回は、tel* なので、wpcf7_validate_tel*
    *wpcf7_validateのように全部に対して考えることもできますが、そうすると制御しないといけない部分が増えるので、ピンポイントで指定のほうが楽です。

    2. タグに対する名前(<input type=”tel” name=”****” の ****の部分は、$tag[‘name’] で取得する。それが couponだったらというチェックにする

    3. preg_match のところですが、一致しない場合に「間違っているために送信出来ません」というエラーを出す構造だと思います。正規表現内をみると、事前に intでキャストしているので、先頭が 8, 9 あるいは 08, 09かどうかのチェックをしています。そのため、そうじゃない場合にエラーにする必要があると思います。

    add_filter('wpcf7_validate_tel*', 'wpcf7_validate_post', 20, 2);
    function wpcf7_validate_post($result,$tag){
    	$name = $tag['name'];
    
    	//ここから一つ一つのフォーム項目にバリデーションを追加します。
    	if ($name == 'coupon') {
     		//your-emailという名前のフォームに対して
     		$coupon = (int) $_POST[$name];
     		if (  ! preg_match('/^(8|9)[0-9]*$/',$coupon )) {
      			$result->invalidate( $tag, 'クーポン番号が間違っているため送信できません。' );
     		}
     		//if(!この部分はPHPで指定)は指定したい条件に当てはまらない(!)場合は
     	}
    	//ここまでが一つのフォーム項目に対して適用させるかたまり。
    	return $result;
    }
    //最後にこの部分が来るようにする。
    
    • この返信は2年、 5ヶ月前にkimipoohが編集しました。
15件の返信を表示中 - 31 - 45件目 (全488件中)