web-dev-qa-db-ja.com

プラグインと設定のロード順(woocommerceの依存関係)

私は動作するWoocommerceに依存するプラグインと、ファンキーで振る舞い、クラス「WC_Settings_Page」をスローする設定ページを開発しています致命的なエラーが見つかりません

if ( !defined( 'ABSPATH' ) ) {exit;}

if ( !class_exists( 'WooCommerce_Chilexpress_Tags_Settings' ) ) {

   class WooCommerce_Chilexpress_Tags_Settings extends WC_Settings_Page{
   ...
   }

   function my_plugin_add_settings() {
      return new WooCommerce_Chilexpress_Tags_Settings();
   }
}

add_filter( 'woocommerce_get_settings_pages', 'my_plugin_add_settings', 15 );

このコードは、アルファベット順でwoocommerce-chilexpress-etiquetasであるプラグインinitの間にロードされるincludes/mysettings.phpにあるので、それはwoocommerceの後にロードされるべきです。

まだわかりませんが、私のプラグイン設定はWooCommerce設定の前に必ず読み込まれますが、PHP致命的エラーが発生します。

PHP Fatal error:  Class 'WC_Settings_Page' not found

明らかな汚い修正は私自身の設定にWC_Settings_Pageコードを挿入することでした。私は今これをきれいにしようとしていますが、どういうわけかそれはうまくいかないでしょう...

だから(はい私は非常に広い知っている)の質問です:私は何を見逃すことができますか?

1
Canelo Digital

問題は、あなたのWooCommerce_Chilexpress_Tags_Settingsが定義されるまでには、WC_Settings_Pageは実際にはまだロードされていないということです。したがって、あなたは致命的なエラーを得ました。

WooCommerceと同じ方法でやりたい場合は、WooCommerce_Chilexpress_Tags_Settingsを別のPHPファイルに配置します。 includes/class-woocommerce-chilexpress-tags-tettings.php、そしてそのファイルからクラスを初期化します - すなわちreturnWooCommerce_Chilexpress_Tags_Settingsのインスタンスです。

<?php
// class-woocommerce-chilexpress-tags-tettings.php

defined( 'ABSPATH' ) || exit;

class WooCommerce_Chilexpress_Tags_Settings extends WC_Settings_Page {

    ...
}

return new WooCommerce_Chilexpress_Tags_Settings();

my_plugin_add_settings()からそれをinclude

function my_plugin_add_settings( $settings ) {
    $settings[] = include 'path/to/includes/class-woocommerce-chilexpress-tags-tettings.php';

    return $settings;
}
add_filter( 'woocommerce_get_settings_pages', 'my_plugin_add_settings' );

そして、お気づきの場合は、my_plugin_add_settings()から$settingsを返す必要があります。

4
Goku

実用例を参照してください。 https://Gist.github.com/bekarice/34aaeda2d4729ef87ad7
あなたはこのようなことをするべきです:

// If this file is called directly, abort.
defined('ABSPATH') or exit();


if ( !class_exists( 'WooCommerce_Chilexpress_Tags_Settings' ) ) {

    function my_plugin_add_settings() {

        class WooCommerce_Chilexpress_Tags_Settings extends WC_Settings_Page {
            // Your class and your code / logic 
        }

        return new WooCommerce_Chilexpress_Tags_Settings();

    }

    add_filter( 'woocommerce_get_settings_pages', 'my_plugin_add_settings', 15 );

}
2
Remzi Cavdar