require_once() и требуют, чтобы функции не работали

#php #wordpress #plugins #require-once

Вопрос:

Я разрабатываю плагин WordPress и хочу, чтобы в моем основном файле в функции инициализации требовалась другая страница,но она не работает, я пробовал require (), reqiure_once() и include_once (), но ни один из них не работал ! я хочу добавить вкладку в настройки woocommerce ps: если я удалю запрос один раз и приведу код из /inc/pages.php чтобы main.php это хорошо работает, но я хочу потребовать этот файл, чтобы мой основной класс не был таким длинным.

итак, какие-нибудь решения?

функция init() в основном классе

 <?php
/*
* //about plugin information 
* 
*/ 

define('WP_DEBUG', true);


// Exit if accessed directly
if( !defined( 'ABSPATH' ) ) exit;


class Main 
{
  public $id='Main';
  public static $slug='';
  public static $wc_status_msg;  
  public static $wc_status;  
  public static $path='';

    public function instance(){
        add_action('plugins_loaded', array($this,'setup_main'));
        register_deactivation_hook(__FILE__,array($this,'deactivate'));
        register_activation_hook(__FILE__,(array($this,'activate')));

    }
    public function setup_main(){
        if(is_admin()){   
            add_action('init', array($this,'init'));

        }
    }
    public function init(){
  
  require_once(self::$path . "inc/pages.php");


    }

   
}

if( class_exists( 'Main' ) ){

    $Main=new Main();
    $Main->instance();
}



?>
 

в pages.php файл находится в папке /inc :

 <?php
// Exit if accessed directly
if( !defined( 'ABSPATH' ) ) exit;


public /**
 * 
 */
class Plugin_pages extends Main
{
    
    function __construct()
    {
         add_filter('woocommerce_settings_tabs_array',array($this,'add_settings_tab'),50);

    }



  /**
  * Add Settings tab.
  *       
  * @param mixed $settings_tabs
  */
  public function add_settings_tab($settings_tabs){
        if(current_user_can('administrator')){ 
  $settings_tabs[$this->id] = __( 'Salesforce', 'woocommerce_settings_tabs_array' );
        }
  return $settings_tabs;
  }













}
if( class_exists( 'Plugin_pages' ) ){

    new Plugin_pages();
    
}


 

Комментарии:

1. это ошибка, которую я получаю в консоли chrome : Не удалось загрузить ресурс: сервер ответил со статусом 500 (Внутренняя ошибка сервера)

2. У вас опечатка в вашем pages.php ( public справа перед вашим первым комментарием к блоку), хотя я предполагаю, что это просто какая-то ошибка вставки. Но, может быть, вы сначала это проверите?

3. После того, как вы это сделали, выведите этот require_once метод из своего init метода и поднимитесь над своим Main классом. Проверьте путь (например is_file(...) ). Кроме того, ознакомьтесь с документами и приведенными в них примерами того, как включить файл в контекст плагина.

4. В настоящее время вы включаете класс в метод другого класса, который определенно не нужен вам. Вместо этого и после того, как вам это потребуется за пределами вашего класса, создайте экземпляр Plugin_pages внутри init() .

5. Кстати, тестирование class_exists() после того, как вы только что определили класс, для которого вы тестируете, не имеет особого смысла — поэтому вы можете либо удалить оба предложения в обоих классах, либо завернуть свои классы внутрь if(class_exists){} . Таким образом, вы должны убедиться, что определяете их только в том случае, если они еще не определены в другом месте. Хотя вы, возможно, захотите взглянуть на пространства имен и на то, как их использовать при написании плагина WordPress .

Ответ №1:

Проблема решена: имя папки плагина содержало пространство типа «Мой плагин», в то время как оно должно быть без пространства типа «Мой плагин».