wp-view-controllerに関するエラーログが出力される

0
いいねをした人: 居ません
8件の投稿を表示中 - 1 - 8件目 (全8件中)
  • 投稿者
    投稿
  • #141315
    夏井光太郎
    参加者
    0

    【お使いの Snow Monkey のバージョン】 27.0.1
    【お使いの Snow Monkey Blocks のバージョン】21.0.7
    【お使いの Snow Monkey Editor のバージョン】10.0.4
    【お使いの PHP のバージョン】PHP8.2.9
    【お使いのブラウザ】Google Chrome
    【当該サイトのURL】非公開

    ### 発生している問題
    Snow Monkey Formsのsnow_monkey_forms/administrator_mailer/argsフィルターを利用して送信先のカスタマイズをしています。

    WP_DEBUGとWP_DEBUG_LOGをtureとした状態で、error_log()関数を記述してメール送信テストを行いました。

    以下のエラーが出力されました。
    PHP Deprecated: trim(): Passing null to parameter #1 ($string) of type string is deprecated in /ホスト/ドメイン/public_html/フォルダ/wp-content/themes/snow-monkey/vendor/inc2734/wp-view-controller/src/App/Contract/Template_Tag.php on line 194

    ### 試したこと
    メールの送信など、動作は正常に見受けられますが、エラーで示された箇所の修正が必要なのかもしれないと思い、ご報告いたしました。

    以上、ご確認よろしくお願いいたします。

    0
    いいねをした人: 居ません
    #141328
    アバター画像キタジマ タカシ
    参加者
    2421

    snow_monkey_forms/administrator_mailer/args フィルターフックを使ったカスタマイズを行わない場合は PHP Deprecated〜 のエラーは表示されないのですかね?

    0
    いいねをした人: 居ません
    #141330
    夏井光太郎
    参加者
    0

    snow_monkey_forms/administrator_mailer/args フィルターフック内のエラー出力処理をコメントアウトし、my-snow-monkey.php に以下の記述を追加してみたところ、ログは出力されましたが、PHP Deprecated〜 のエラーは表示されませんでした。

    // フィルターフックの外でエラーログを出力
    if (defined('WP_DEBUG') && WP_DEBUG && defined('WP_DEBUG_LOG') && WP_DEBUG_LOG) {
      error_log("test");
    }

    Snow Monkey Formsの「別のフィルターフックを試した方が良いか」とも考えましたが、適当なフィルターフックがわからず……(汗)

    上記の対応でよろしかったでしょうか。
    ご確認お願いいたします。

    0
    いいねをした人: 居ません
    #141338
    アバター画像キタジマ タカシ
    参加者
    2421

    ありがとうございます。となると snow_monkey_forms/administrator_mailer/args にフックさせた処理に何かある可能性もあるのかなと思いました。

    こちらでも試してみたいので、snow_monkey_forms/administrator_mailer/args にフックさせた処理をここに貼り付けてもらうことはできますか?

    0
    いいねをした人: 居ません
    #141343
    夏井光太郎
    参加者
    0

    お問い合わせフォームにラジオボタンを設置し、ラジオボタンの選択に応じて送信先を変更する意図で処理を実装しております。NAME属性の値はinquiryとしています。
    ラジオボタンのOPTIONSlabelは記入せず、valueのみを改行で入力しております。

    add_filter(
    	'snow_monkey_forms/administrator_mailer/args',
    	function ($headers, $responser, $setting) {
    		//お問い合わせフォームページのみで以下の処理を行う
    		if (is_page('contact')) {
    			$inquiry = $responser->get('inquiry');
    			$recipient = "";
    			switch ($inquiry) {
    				case "ボタン1":
    					$recipient = "メールアドレス1";
    					break;
    				case "ボタン2":
    					$recipient = "メールアドレス2";
    					break;
    				case "ボタン3":
    					$recipient = "メールアドレス3";
    					break;
    				case "ボタン4":
    					$recipient = "メールアドレス4";
    					break;
    			}
    			// // 【開発用】$inquiry の値をデバッグログに出力
    			// if (defined('WP_DEBUG') && WP_DEBUG && defined('WP_DEBUG_LOG') && WP_DEBUG_LOG) {
    			// error_log('$inquiry: ' . print_r($inquiry, true));
    			// }
    			$headers['to'] = $recipient;
    		}
    		return $headers;
    	},
    	10,
    	3
    );

    ご確認よろしくお願いいたします。

    0
    いいねをした人: 居ません
    #141377
    アバター画像キタジマ タカシ
    参加者
    2421

    お返事遅くなりすみません! いただいたコードをテスト環境にはりつけて試してみました。

    PHP 8.1、8.2、8.3 で試してみたのですが、いずれの環境でもエラーは確認できませんでした。

    別の要因がエラーの原因である可能性もあるのかな?と思いましたので、以下について教えてください。

    以下のエラーが出力されました。
    PHP Deprecated: trim(): Passing null to parameter #1 ($string) of type string is deprecated in /ホスト/ドメイン/public_html/フォルダ/wp-content/themes/snow-monkey/vendor/inc2734/wp-view-controller/src/App/Contract/Template_Tag.php on line 194

    上記について、エラーはどこに出力されたのでしょうか? 画面上、エラーログ等…。

    エラーログだった場合、error_log('$inquiry: ' . print_r($inquiry, true)); の部分を error_log('$inquiry: ' . print_r($inquiry, true), 3, get_template_directory() . '/error_log'); のようにすると、そのエラーは snow-monkey/error_log に出力されるのか、それともサーバーのエラーログに出力されるのかどちらでしょうか?

    もう一点、子テーマや My Snow Monkey によるテンプレートの上書き、あるいは snow_monkey_get_template_part_render フィルターフックを使ったカスタマイズはされていますでしょうか?
    している場合、それをやめるとエラーは発生しなくなりますか?

    0
    いいねをした人: 居ません
    #141386
    夏井光太郎
    参加者
    0

    お返事いただきありがとうございます!

    まず結果をお伝えしますと、PHP Deprecated〜のエラーは出力されなくなりました。

    【ソースコードの誤りについて】
    先に提示したコードに誤りがあったことをお詫びします。
    is_page()による条件分岐内でエラーログ出力の処理が機能していないようでした。
    このため、条件分岐の外に$reponser->get()を記述し、この値に応じて処理を追加するように修正いたしました。

    add_filter(
    	'snow_monkey_forms/administrator_mailer/args',
    	function ($headers, $responser, $setting) {
    		$inquiry = $responser->get('inquiry');
    		$recipient = "";
    
    		//inquiryがnullでない場合のみで以下の処理を行う
    		if (!is_null($inquiry)) {
    
    			// switch文(inquiryの値に応じた送信先の設定
    
    			$headers['to'] = $recipient;
    
    			// if文の中でログ出力A
    
    		}
    
    		// if文の中でログ出力B
    
    		return $headers;
    	},
    	10,
    	3
    );

    【エラーログの出力箇所について】
    エラーログはwp-content/debug.logに出力されておりました。
    ご提示いただいた以下のコードに書き換えたところ、wp-content/themes/snow-monkey/error_logに出力されました。

    error_log('$inquiry: ' . print_r($inquiry, true), 3, get_template_directory() . '/error_log');
    

    【カスタマイズについて】
    ・子テーマ=利用無し
    ・ My Snow Monkey によるテンプレートの上書き=snow_monkey_template_part_root_hierarchy_template-parts/を利用しています。
    snow_monkey_get_template_part_render=利用しています。

    エラーの再現がなくなったため、これらのカスタマイズとの関係はわかりませんでした。

    以上です。
    最初に出力されたエラーが再現しなくなった理由がハッキリとわかりませんが、ひとまず正常に動作しているという認識です。

    お手数おかけして、申し訳ありませんでした。

    0
    いいねをした人: 居ません
    #141415
    アバター画像キタジマ タカシ
    参加者
    2421

    んーとなると is_page() に何かあるんですかね〜。でもこちらの環境では is_page() を使っても PHP Deprecated: は出力されなかったので、is_page() + 何か、あるいは is_page() のときに発火する何か、みたいな可能性もあるのかなと思いました。

    トピックのクローズをお願いします!

    0
    いいねをした人: 居ません
8件の投稿を表示中 - 1 - 8件目 (全8件中)
  • トピック「wp-view-controllerに関するエラーログが出力される」には新しい返信をつけることはできません。

ドキュメント

Snow Monkey の設定方法やマニュアルを掲載しています。

ドキュメント

フォーラム

Snow Monkey の使い方やカスタマイズについてのご質問・ご要望等はサポートフォーラムで行っています。サポートフォーラムは誰でも閲覧できますが、書き込みできるのは Snow Monkey 購入者のみとなります。

サポートフォーラム

よくあるご質問

Snow Monkey のサービスについて不明な点がある場合は、まずはよくあるご質問をご確認ください。

よくあるご質問

お問い合わせ

よくあるご質問を見ても解決しなかった場合、試用版の申請については問い合わせフォームからお願いいたします。

お問い合わせ

Snow Monkey は Gutenberg ブロックエディターに対応した 100%GPL の WordPress テーマです。拡張性を意識した開発をおこなっており、カスタマイザーとブロックでスピーディーにサイトを立ち上げるだけでなく、CSS やフックを駆使した高度なカスタマイズにも柔軟に対応できます。