-
投稿者投稿
-
2019年2月20日 11:35 PM #10757
トピックを新しく立てる方は次の項目も記述してください(要望トピックの場合は不要です)。
【お使いの 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いいねをした人: 居ません2019年2月21日 9:21 AM #10781Cannot 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いいねをした人: 居ません2019年2月21日 11:23 AM #10801申し訳ございません。、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いいねをした人: 居ません2019年2月21日 11:33 AM #10805基本的にはすべて
plugins_loaded
の中( 場合によってはinit
、after_setup_theme
)でおこなうのが安全です。コードは読み込まえた順に実行されていくので、先のトピックにも書いたように、実行しようとした時点で関数やクラスが存在していないとエラーになります。plugins_loaded
のようなフックの中で処理をおこなうようにすることで、処理が実行される順番を変更することができるので、必要な関数やクラスを読み込んだあとに処理を実行する、ということが可能になります。♥ 0いいねをした人: 居ません2019年2月21日 11:50 AM #10808注意点、ご教示ありがとうございました。
①の場合、function custom_override_checkout_fields( $fields ) {
というのがあって、plugins_loadedでの囲い方がよく分かりません。お手数ですが、教えていただけませんでしょうか。♥ 0いいねをした人: 居ません2019年2月21日 12:07 PM #10811色々書き方はありますが、全部まとめて入れるのが簡単かなと。
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いいねをした人: 居ません2019年2月21日 1:48 PM #10813ありがとうございます。うまくいきました!
今後は、これを参考にしたいと思います。
トピック閉じさせていただきます。♥ 0いいねをした人: 居ません -
投稿者投稿
- トピック「my-snow-monkeyでのエラー」には新しい返信をつけることはできません。