- 19, Oct 2024
- #1
В настоящее время я пытаюсь создать плагин для WordPress для создания страницы настроек.
it will run the add_action function but won't get to the callback. It just skips it.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(); }
Но по какой-то причине, когда я использую
Я попытался создать тестовый класс с одной функцией так же, как и основной класс, и это работает.
Итак, я где-то делаю что-то другое, но не знаю что.
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'))
РЕДАКТИРОВАТЬ