my-snow-monkeyでのエラー

  • このトピックには6件の返信、2人の参加者があり、最後にM Tにより1年、 7ヶ月前に更新されました。
7件の投稿を表示中 - 1 - 7件目 (全7件中)
  • 投稿者
    投稿
  • #10757
    M T
    閲覧者
    5

    トピックを新しく立てる方は次の項目も記述してください(要望トピックの場合は不要です)。
    【お使いの Snow Monkey のバージョン】v5.1.1


    度々で恐縮です。
    前回、my-snow-monkeyでのエラーを解決していただいたのですが、再度、下記コード追記でエラーが出ました。

    前回同様、function.phpでは正常に動作しています。
    (追加したコード)

    //WooCommerce 請求先情報 項目削除
    add_filter( 'woocommerce_checkout_fields' , 'custom_override_checkout_fields' );
    function custom_override_checkout_fields( $fields ) {
    unset($fields['billing']['billing_company']);
    unset($fields['billing']['billing_address_1']);
    unset($fields['billing']['billing_address_2']);
    unset($fields['billing']['billing_city']);
    unset($fields['billing']['billing_postcode']);
    unset($fields['billing']['billing_country']);
    unset($fields['billing']['billing_state']);
    unset($fields['billing']['billing_phone']);
    return $fields;
    }

    (エラーメッセージ)

    Fatal error: Cannot redeclare custom_override_checkout_fields() (previously declared in /xxxxx/public_html/wp-content/plugins/my-snow-monkey/my-snow-monkey.php:550) in /xxxxx/public_html/wp-content/themes/snow-monkey-child/functions.php on line 14
    

    前回同様プラグイン関係なので、前回教えていただいた以下のコードで挟んだのですが、修正できませんでした。

    add_action(
    'plugins_loaded',
    function() {
    -----内容------
    }
    );

    どうぞよろしくお願いいたします。

    0
    #10781
    キタジマ タカシ
    キーマスター
    286

    Cannot redeclare custom_override_checkout_fields() は、 custom_override_checkout_fields() という関数が重複して定義されているという意味です。

    そして、その重複は /xxxxx/public_html/wp-content/plugins/my-snow-monkey/my-snow-monkey.php の550行目と /xxxxx/public_html/wp-content/themes/snow-monkey-child/functions.php の14行目で起こっているとあります。

    /xxxxx/public_html/wp-content/themes/snow-monkey-child/functions.php は子テーマの functions.php なので、子テーマにも同じコードを書かれていませんか?

    0
    #10801
    M T
    閲覧者
    5

    申し訳ございません。、function.phpの記載を外していませんでした。外したらエラー消えました。

    この関連でお聞きしたいのですが、ウーコマース関連のカスタマイズで、順番によってエラーになる時があります。

    //WooCommerce 請求先情報 項目削除
    add_filter( 'woocommerce_checkout_fields' , 'custom_override_checkout_fields' );
    
    function custom_override_checkout_fields( $fields ) {
        unset($fields['billing']['billing_company']);
        unset($fields['billing']['billing_address_1']);
        unset($fields['billing']['billing_address_2']);
        unset($fields['billing']['billing_city']);
        unset($fields['billing']['billing_postcode']);
        unset($fields['billing']['billing_country']);
        unset($fields['billing']['billing_state']);
        unset($fields['billing']['billing_phone']);
        return $fields;
    }

    //WooCommerce 関連商品削除
    remove_action( 'woocommerce_after_single_product_summary', 'woocommerce_output_related_products', 20 );
    
    add_action(
        'plugins_loaded',
        function() {
           add_filter( 'woocommerce_checkout_fields' , 'custom_override_checkout_fields' );
        }
    );

    ①、②の順ならよいのですが、②、①の順だとエラーが出ます。
    function.phpではどちらでも大丈夫なようですが、この辺はどういった点を気を付けたらよいでしょうか。
    MWFORM関連でも、同じフィルターフックでも下記で囲わないとエラーになる場合と、そのままでも大丈夫な場合があります。

    add_action(
    'plugins_loaded',
    function() {
    -----内容------
    }
    );
    0
    #10805
    キタジマ タカシ
    キーマスター
    286

    基本的にはすべて plugins_loaded の中( 場合によっては initafter_setup_theme )でおこなうのが安全です。コードは読み込まえた順に実行されていくので、先のトピックにも書いたように、実行しようとした時点で関数やクラスが存在していないとエラーになります。

    plugins_loaded のようなフックの中で処理をおこなうようにすることで、処理が実行される順番を変更することができるので、必要な関数やクラスを読み込んだあとに処理を実行する、ということが可能になります。

    0
    #10808
    M T
    閲覧者
    5

    注意点、ご教示ありがとうございました。
    ①の場合、function custom_override_checkout_fields( $fields ) { というのがあって、plugins_loadedでの囲い方がよく分かりません。お手数ですが、教えていただけませんでしょうか。

    0
    #10811
    キタジマ タカシ
    キーマスター
    286

    色々書き方はありますが、全部まとめて入れるのが簡単かなと。

    add_action(
        'plugins_loaded',
        function() {
            function custom_override_checkout_fields( $fields ) {
                unset($fields['billing']['billing_company']);
                unset($fields['billing']['billing_address_1']);
                unset($fields['billing']['billing_address_2']);
                unset($fields['billing']['billing_city']);
                unset($fields['billing']['billing_postcode']);
                unset($fields['billing']['billing_country']);
                unset($fields['billing']['billing_state']);
                unset($fields['billing']['billing_phone']);
                return $fields;
            }
    
            remove_action( 'woocommerce_after_single_product_summary', 'woocommerce_output_related_products', 20 );
            add_filter( 'woocommerce_checkout_fields', 'custom_override_checkout_fields' );
            add_filter( 'woocommerce_checkout_fields' , 'custom_override_checkout_fields' );
        }
    );
    0
    #10813
    M T
    閲覧者
    5

    ありがとうございます。うまくいきました!
    今後は、これを参考にしたいと思います。
    トピック閉じさせていただきます。

    0
7件の投稿を表示中 - 1 - 7件目 (全7件中)
  • トピック「my-snow-monkeyでのエラー」には新しい返信をつけることはできません。