Разработка Плагина - Add_Action Не Вызывает Функцию Обратного Вызова

  • Автор темы Gca
  • Обновлено
  • 19, Oct 2024
  • #1

В настоящее время я пытаюсь создать плагин для WordPress для создания страницы настроек.

 
 
 
 
 include_once('settings/SocialOptions.class.php');

$options = array(

...

)
);
$socialOptions = new SocialOptions($options);
add_action("admin_init", array($socialOptions, 'setOptions'));

function socialShareOptions(){

global $socialOptions;

$socialOptions->buildSettingsPage();
}
 
it will run the add_action function but won't get to the callback. It just skips it.

Но по какой-то причине, когда я использую

Я попытался создать тестовый класс с одной функцией так же, как и основной класс, и это работает.

Итак, я где-то делаю что-то другое, но не знаю что.

include_once('settings/SocialOptions.class.php'); class Test { function testing(){ return 'nothing'; } } function socialShareOptions(){ $options = array( ... ); $socialOptions = new SocialOptions($options); $socialOptions->buildSettingsPage(); /*NOTE THIS PART*/ $test = new Test(); add_action("admin_init", array($test, 'testing') ); }

вот код.

class SocialOptions { private $_optionsArray; function __construct( $options = array() ) { $this->_optionsArray = $options; } public function setOptions() { add_settings_section("social_share_config_section", "", null, "social-share"); foreach ( $this->_optionsArray as $option) { add_settings_field("social-share-facebook", $option['title'], array($this, 'option'), "social-share", "social_share_config_section", $option); } foreach ( $this->_optionsArray as $option) { register_setting("social_share_config_section", $option['name']); } } public function option( $fieldData ){ ?> <input type="<?php echo $fieldData['type'] ?> " name="<?php echo $fieldData['name']; ?>" value="<?php echo $fieldData['value'] ?>"<?php checked(1, get_option($fieldData['name']), true)?> /><?php echo $fieldData['title'] ?> <?php } public function buildSettingsPage() { $html = '<div class="wrap social-admin-style"> <div class="title"> <h1>Social Sharing Options</h1> </div> <div class="main-content"> <form method="post" action="options.php"> ' . settings_fields("social_share_config_section") . ' ' . do_settings_sections("social-share") . ' '. submit_button() . ' </form> </div> </div>'; echo $html; } }

Я разделил код на 3 разных файла и опубликую его в порядке включения файлов.

include_once('settings/SocialOptions.class.php'); function socialShareOptions(){ $options = array( array( 'type' => 'checkbox', 'name' => 'social-share-facebook', 'value' => 1, 'title' => 'Show Facebook ' ), array( 'type' => 'checkbox', 'name' => 'social-share-twitter', 'value' => 1, 'title' => 'Show Twitter' ), array( 'type' => 'checkbox', 'name' => 'social-share-instagram', 'value' => 1, 'title' => 'Show instagram' ) ); $socialOptions = new SocialOptions($options); $socialOptions->buildSettingsPage(); add_action("admin_init", array($socialOptions, 'setOptions') ); }

Индексный файл для плагина

SocialOptions.class.php

options.php

include('admin/options.php'); function social_share_menu_item() { add_submenu_page("options-general.php", "Social Share", "Social Share", "manage_options", "social-share", 'socialShareOptions'); } add_action("admin_menu", "social_share_menu_item"); ...

Как было указано ранее, при отладке кода я вижу, что функция add_action запускается, но в какой-то момент она просто пропускает конец функции и никогда не входит в метод setOptions.

когда я создаю следующее, все работает нормально:

options.php
В отладке это будет работать нормально.

Вот почему я не понимаю, почему другой метод не работает.

Дополнительная информация
по совету Б. Шуйлинга

В журналах ошибок php я не получаю никаких ошибок.

Надеюсь, вы, ребята, сможете помочь. И спасибо, что нашли время прочитать это.


ЕСЛИ вам нужна дополнительная информация, пожалуйста, дайте мне знать.

add_action("admin_init", array(class_object, 'function_name'))

РЕДАКТИРОВАТЬ

Gca


Рег
01 Oct, 2007

Тем
54

Постов
203

Баллов
523
  • 25, Oct 2024
  • #2

В вашем классе ваша функция называется «публичная функция setOption()», а не setOptionS. Проверьте журнал ошибок на наличие подобных проблем.

Кроме того, в вашем коде я не вижу, чтобы где-либо вызывалась функция SocialShareOptions.

 

Valeriycherkaso


Рег
29 Oct, 2011

Тем
63

Постов
196

Баллов
531
Похожие темы Дата
Похожие темы
Excerpt – Почему Использование Фильтра Excerpt_More Меняет Расположение Ссылки?
Как Сохранить Один И Тот Же Пост В Нескольких Блогах?
Javascript — Переключиться На Вкладку Библиотеки В Загрузчике Мультимедиа.
Sql — Какие Данные Записываются И Сохраняются В Базе Данных, Когда Сайт Посещают Пользователи С Правами Только Для Чтения (Не Публикующие Сообщения И Не Комментирующие)?
Шаблоны – Как Перечислить/Показать Все Пользовательские Типы Сообщений Независимо От Категории?
Видео – Oembed Vimeo С Параметрами Add_Query_Arg, Не Вставленными В Html.
Редакции. Почему При Повторной Загрузке Медиафайла Восстанавливается Старая Версия?
Javascript — Преобразование Html-Списка В Дерево Флажков С Помощью Плагина Jstree
Используйте Cpt В Качестве Таксономии
Как Принудительно Войти В Систему После Того, Как Пользователь Просматривает Несколько Минут Или Просматривает Несколько Страниц?
Тем
403,760
Комментарии
400,028
Опыт
2,418,908

Интересно