#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:
Проблема решена: имя папки плагина содержало пространство типа «Мой плагин», в то время как оно должно быть без пространства типа «Мой плагин».