web-dev-qa-db-fra.com

PHP Erreur fatale: appel de la fonction non définie plugin_basename

Je reçois le message d'erreur suivant: [27-juin-2012 18:22:39 UTC] PHP Erreur irrécupérable: appel de la fonction indéfinie plugin_basename () dans/XXXX/public_html/wp-content/plugins/price -update/price-update.php à la ligne 68:

            //We set the plugin basename here, could manually set it, but this is for demonstration purposes
            $this->plugin_basename = plugin_basename(__FILE__);

dans ce bloc de code:

class PriceUpdate extends mtekk_admin
{
        protected $version = '0.0.1';
        protected $full_name = 'Price Update';
        protected $short_name = 'Price Update';
        protected $access_level = 'manage_options';
        protected $identifier = 'pr_upate';
        protected $unique_prefix = 'prud';
        protected $plugin_basename = 'price-update/price-update.php';
        protected $opt = array();
        /**
         * __construct()
         *
         * Class default constructor
         */
        function __construct()
        {
                //We set the plugin basename here, could manually set it, but this is for demonstration purposes
                $this->plugin_basename = plugin_basename(__FILE__);
                register_deactivation_hook(__FILE__, array($this, 'deactivate'));
                add_action($this->unique_prefix . '_cron_hook', array($this,'cron_handle'));
                //Register some of our custom taxonomies
                add_action('init', array($this, 'wp_init'), 0);
                add_action('wp_footer', array($this, 'footer'));
                //We're going to make sure we load the parent's constructor
                parent::__construct();
        }

Cependant, sa définition ci-dessus:

        protected $plugin_basename = 'price-update/price-update.php';

des idées?

1
whatsthebigidea

plugin_basename est une fonction WordPress qui obtient le nom du fichier de plug-in en lui passant simplement le répertoire.

Lorsque vous appelez $this->plugin_basename, PHP recherche une fonction plugin_basename définie dans YOUR class. Aucune fonction plugin_basename () dans votre classe == PHP Fatal Error.

Si vous souhaitez simplement définir une variable contenant le nom du fichier plugins, procédez comme suit:

var $plugin_filename = plugin_basename( __FILE__);

2
Chris_O

Vous feriez peut-être mieux d'utiliser plugin_dir_path(__FILE__); ?

Exemple:

<?php
define( 'MYPLUGINNAME_PATH', plugin_dir_path(__FILE__) );
require MYPLUGINNAME_PATH . 'includes/class-metabox.php';
require MYPLUGINNAME_PATH . 'includes/class-widget.php';
?>

[EDIT - 29/06/2012]

Je pense que votre logique PHP OOP est incorrecte, mais je peux me tromper. Vous définissez une propriété dans une classe enfant qui étend une classe parent . Vous appelez ensuite le constructeur parent à l'intérieur du constructeur enfant .

Le code que vous avez fourni montre que vous affectez la propriété de classe enfant $plugin_basename, mais que vous ne faites plus rien par la suite.

Je suppose que vous essayez de définir une propriété $plugin_basename à gérer par la classe parent. Toutefois, si tel est le cas, vous devez définir la propriété dans la classe parent. Vous devez également appeler la méthode parent OR, qui utilise la propriété $plugin_basename.

Si c'est PAS le cas, vous devez vous assurer d'utiliser la propriété $plugin_basename, au sein de la classe enfant, APRÈS. il a été assigné comme suit: $this->child_class_method_name($this->plugin_basename);

Vous pouvez accéder à la méthode de la classe parent qui gère la propriété $plugin_basename et transmettre la propriété affectée par la classe enfant à la méthode de la classe parent, comme suit: $this->parent_class_method_name($this->plugin_basename);

Je ne suis pas vraiment certain de la configuration de votre plugin, compte tenu de la quantité minimale de code que vous avez fournie.

Si vous pouviez fournir une idée plus précise de ce que vous faites avec la propriété $plugin_basename, une fois celle-ci attribuée, je pourrais peut-être vous aider davantage.

0
Michael Ecklund