• 解決済 ssawara

    (@ssawara)


    問題:ショートコードでphpファイルを挿入できるようにした時、そのphpファイル内で独自関数を作るとエラーが出てしまいます。

    やりたい事:固定ページにショートコードで自作のphpファイルを反映したい
    ・単なるphpファイルは反映できた
    ・しかし、phpファイルに独自関数を作るとエラーが出る

    エラーが出るまでの流れ
    まず、固定ページにショートコードで自作のphpファイルを反映するため、テーマ内のfunctions.phpを以下のように変更しました。

    <?php
    if ( !defined( 'ABSPATH' ) ) {
    exit;
    }
    
    function Include_my_php($params = array()) {
        extract(shortcode_atts(array(
            'file' => 'default'
        ), $params));
        ob_start();
        include(STYLESHEETPATH . "/$file.php");
        return ob_get_clean();
    }
    add_shortcode('myphp', 'Include_my_php');
    ?>

    続いて、自作のphpファイルであるtest.phpが固定ページにショートコードで反映されるか確認しました。
    test.phpの中身は以下の通りです。

    <?php
    echo 'テスト';
    ?>

    固定ページ内にはショートコードとして、[myphp file='test']を挿入しました。
    結果、固定ページには”テスト”と表示されます。

    そして、ここからが問題点になります。
    test.phpの中身を以下のように独自関数として変更しました。

    <?php
    function test(){
        echo 'テスト';
    }
    test();
    ?>

    ここで”テスト”と表示されることを期待したのですが、結果としてはエラーになってしまいます。
    functions.phpに直接独自関数を書けば、上手くいくのだと思いますが、ショートコードで挿入したphpファイル(今回で言うtest.php)に独自関数をいくつも使いたいのです。

    是非、このことに対するご回答いただけますと幸いです。

12件の返信を表示中 - 1 - 12件目 (全12件中)
  • ssawara さん、こんにちは。

    > ここで”テスト”と表示されることを期待したのですが、結果としてはエラーになってしまいます。

    どの行で、どのようなエラーが発生しているのでしょうか。

    Webサーバのログを確認したり、DEBUG モードを有効にして、具体的なエラーメッセージを確認していただけないでしょうか。

    こんにちは

    ご質問に関する回答ではありませんが、ちょっと気になりましたので。
    ローカル ファイル インクルード対策の為、ファイル名はサニタイズされた方がいいかなと思いました。質問用のコードで簡略されているようでしたら、あしからずご了承くださいませ。

    $file = sanitize_file_name( $file );

    トピック投稿者 ssawara

    (@ssawara)

    ishitaka様

    お返事ありがとうございます。
    サニタイズの件、是非参考にさせていただきます。

    どのようなエラーかは分かりませんが、こちらの環境でテストした限りでは再現できませんでした。

    また、extractWordPressのPHPコーディング規約で禁止されているので、以下のように書くと良いと思います。

    $params = shortcode_atts(
    	array(
    		'file' => 'default'
    	),
    	$params
    );

    あとは、存在しないファイルをショートコードの引数で指定すればWarningエラーを引き起こせるので、ファイル存在チェックも必要だと思います。

    トピック投稿者 ssawara

    (@ssawara)

    KOJI様

    お返事ありがとうございます。

    test.php内では、

    function test(){
    }

    と独自関数を作るとエラーが出るようでした。

    DevToolsでのそのエラー内容としましては、
    GET http://localhost:(ここはその固定ページのパス)/ 500 (Internal Server Error)
    と、固定ページのdocumentのGETのところに関してエラーが出ている状況です。

    トピック投稿者 ssawara

    (@ssawara)

    Aki Hamano様

    お返事ありがとうございます。
    規約ともに是非参考にさせていただきます。

    こんにちは

    デバッグモードを有効にしてエラーメッセージを確認してみてください。

    これはあくまで私の勘ですが、他にもtestという関数を定義していて重複しているんではないでしょうか。

    ショートコードを同じパラメーターで複数使用していたりしませんか?このコードでは複数使用されるとエラーになると思います。関数を別ファイルにされてみてはどうでしょうか?

    トピック投稿者 ssawara

    (@ssawara)

    munyagu 様

    お返事ありがとうございます。

    デバックモードを有効にしたところ、以下のようなエラーメッセージが確認されました。

    Notice: 関数 register_block_script_handle が誤って呼び出されました。”contact-form-7/contact-form-selector” ブロック定義で定義された “editorScript” のアセットファイルがありません。 詳しくは WordPress のデバッグをご覧ください。 (このメッセージはバージョン 5.5.0 で追加されました) in /(ローカルのパス)/wordpress/wp-includes/functions.php on line 5835

    自分の力で解決できず、お力添えいただけますと幸いです。

    トピック投稿者 ssawara

    (@ssawara)

    ishitaka 様

    お返事ありがとうございます。

    ショートコードは一つのみの使用の状況にあります。関数を別ファイルにしても、上手く動作いたしません。
    デバックモードを有効にしたところ、以下のようなエラーメッセージが確認されましたので、ご確認いただけますと幸いです。

    Notice: 関数 register_block_script_handle が誤って呼び出されました。”contact-form-7/contact-form-selector” ブロック定義で定義された “editorScript” のアセットファイルがありません。 詳しくは WordPress のデバッグをご覧ください。 (このメッセージはバージョン 5.5.0 で追加されました) in /(ローカルのパス)/wordpress/wp-includes/functions.php on line 5835

    このメッセージはエラーではありません。また、今回の問題とも関係ないと思います。
    https://contactform7.com/ja/2022/12/16/contact-form-7-571/

    他にメッセージが出力されていないかを確認してみてください。

    試しに function_exists() で2重定義のチェックをしてみてはどうでしょうか?

    if ( ! function_exists( 'test' ) ) {
    	function test(){
    		echo 'テスト';
    	}
    }
    トピック投稿者 ssawara

    (@ssawara)

    ishitaka 様

    何度もお返事ありがとうございます。
    共有いただいたfunction_exists()で実行しましたところ、無事表示することができました。
    test()以外の独自関数の利用も確認でき、私自身の課題は解決いたしました。

    誠にありがとうございました。

12件の返信を表示中 - 1 - 12件目 (全12件中)
  • トピック「phpファイルに独自関数を作るとエラーが出る」には新たに返信することはできません。