私は動作する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コードを挿入することでした。私は今これをきれいにしようとしていますが、どういうわけかそれはうまくいかないでしょう...
だから(はい私は非常に広い知っている)の質問です:私は何を見逃すことができますか?
問題は、あなたのWooCommerce_Chilexpress_Tags_Settings
が定義されるまでには、WC_Settings_Page
は実際にはまだロードされていないということです。したがって、あなたは致命的なエラーを得ました。
WooCommerceと同じ方法でやりたい場合は、WooCommerce_Chilexpress_Tags_Settings
を別のPHPファイルに配置します。 includes/class-woocommerce-chilexpress-tags-tettings.php
、そしてそのファイルからクラスを初期化します - すなわちreturn
はWooCommerce_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
を返す必要があります。
実用例を参照してください。 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 );
}