Je développe un plugin dépendant de Woocommerce qui fonctionne, ainsi qu'une page de paramètres qui se comporte de manière géniale et lance une classe 'WC_Settings_Page' introuvable. Erreur fatale
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 );
ce code est dans un includes/mysettings.php qui est chargé pendant le plugin init, qui est alphabétiquement woocommerce-chilexpress-etiquetas, il devrait donc être chargé après woocommerce
Pour une raison que je ne comprends pas encore, les paramètres de mon plug-in sont toujours chargés avant ceux de WooCommerce, même si je reçois un PHP Erreur fatale:
PHP Fatal error: Class 'WC_Settings_Page' not found
La solution incorrecte évidente consistait à insérer le code WC_Settings_Page dans mes propres paramètres. J'essaie maintenant de nettoyer cela, mais de toute façon cela ne fonctionnera pas ...
Donc, la question (oui, je sais très large) est: Que pourrais-je manquer?
Le problème est que, au moment où votre WooCommerce_Chilexpress_Tags_Settings
est défini, WC_Settings_Page
n'est en effet pas encore chargé; par conséquent vous avez l'erreur fatale.
Et si vous souhaitez le faire de la même manière que WooCommerce, placez le WooCommerce_Chilexpress_Tags_Settings
dans un fichier PHP séparé, par exemple. includes/class-woocommerce-chilexpress-tags-tettings.php
et initialisez la classe à partir de ce fichier - c.-à-d. return
une instance de WooCommerce_Chilexpress_Tags_Settings
comme ceci:
<?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();
et include
il de my_plugin_add_settings()
:
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' );
Et si vous avez remarqué, vous devez renvoyer le $settings
de my_plugin_add_settings()
.
Voir l'exemple de travail: https://Gist.github.com/bekarice/34aaeda2d4729ef87ad7
Vous devriez faire quelque chose comme ceci:
// 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 );
}