Intereting Posts
База данных для поля автозаполнения JQuery Скрыть меню гамбургера на конкретной странице (передняя страница / домашняя страница) Показать полное изображение thumbnail Удалить сообщение meta от AJAX Пользовательский поиск Ajax не работает должным образом Является ли мой код правильным для создания короткого кода изображения Создать страницу архива для пользовательских таксономий Пользовательские запросы – дочерние категории не отображаются Проверьте, опубликовал ли пользовательский термин таксономии опубликованные сообщения? Старые заголовки и изображения из сообщений, показывающих в предварительном просмотре ссылок на iphone и skype Какие сценарии WordPress должны быть исполняемыми для новой установки? Сортировка не работает в WordPress WP_Query Публичные сообщения – предотвращение повторных представлений формы Отправить письмо от WordPress старые постоянные ссылки не найдены

Как добавить класс в плагин только для сетевого сайта?

Я создал поле ввода в целом – настройки. Он находится в плагине для локального сетевого сайта ngo.

Похоже на это, и он отлично работает.

$ngob_sitelist_slug = new ngob_sitelist_slug(); class ngob_sitelist_slug { function ngob_sitelist_slug( ) { add_filter( 'admin_init' , array( &$this , 'ngob_register_slug' ) ); } function ngob_register_slug() { register_setting( 'general', 'sitelist_slug', 'esc_attr' ); add_settings_field('sitelist_slug', '<label for="sitelist_slug">'.__('Slug för site-lista' , 'ngo-branding' ).'</label>' , array(&$this, 'ngob_slug_html') , 'general' ); } function ngob_slug_html() { $value = get_option( 'sitelist_slug', '' ); echo '<input type="text" id="sitelist_slug" name="sitelist_slug" value="' . $value . '" />'; } } 

Однако я хочу, чтобы он был создан для сетевого (основного) сайта на установке WPMU.

Поэтому я сделал это;

  // Get site id $blog_id = get_current_blog_id(); // Check if we are on network site if( is_main_site( $blog_id ) ) { $ngob_sitelist_slug = new ngob_sitelist_slug(); class ngob_sitelist_slug { function ngob_sitelist_slug( ) { add_filter( 'admin_init' , array( &$this , 'ngob_register_slug' ) ); } function ngob_register_slug() { register_setting( 'general', 'sitelist_slug', 'esc_attr' ); add_settings_field('sitelist_slug', '<label for="sitelist_slug">'.__('Slug för site-lista' , 'ngo-branding' ).'</label>' , array(&$this, 'ngob_slug_html') , 'general' ); } function ngob_slug_html() { $value = get_option( 'sitelist_slug', '' ); echo '<input type="text" id="sitelist_slug" name="sitelist_slug" value="' . $value . '" />'; } } } 

Однако я получаю эту ошибку при перезагрузке страницы:

 Fatal error: Uncaught Error: Class 'ngob_sitelist_slug' not found...(shortened the output, since it's mostly path:s) 

Почему это? Я довольно новичок в классах, чтобы начать, но когда не на сетевом сайте, класс не запускается, поэтому никаких проблем, как и ожидалось. Но когда на сетевом сайте я получаю выше ошибки ..

Как исправить это, чтобы я мог получить это поле ввода, но только на основном (сетевом) сайте?

Я не совсем понимаю, в чем проблема, и, похоже, сложно найти что-либо в Google об этом. Думаю, вы не можете обернуть класс в if if? Но почему бы и нет, и в основном, как решить проблему?

Как вы вызываете ngob_sitelist_slug ?

Я собираюсь предположить, что вы делаете что-то вроде $my_class = new ngob_sitelist_slug; , Для этого нужно, чтобы ваш класс имел конструктор . если это не так, вы получите сообщение об ошибке.

Вы все равно можете вызвать свои методы класса статически:

 $my_thing = ngob_sitelist_slug::my_method(); 

Хотя технически вы должны добавить static ключевое слово к вашим методам в этом случае.

Также я вижу, что в вашем случае вы используете $ this, поэтому вам действительно нужен конструктор.

EDIT: Теперь я понимаю, что у вас есть конструктор, пусть и устаревший.

Я решил проблему, сделав это;

 class ngob_sitelist_slug { function ngob_sitelist_slug( ) { // Check if we are on network site if( is_main_site( $blog_id ) ) { add_filter( 'admin_init' , array( &$this , 'ngob_register_slug' ) ); } } 

Остальная часть кода такая же. Но я предполагаю, что должен быть лучший aproach? Как вам это сделать?