Jakub
Sołowiej
Service Manager,
ITIL Expert
Temat: ERROR: options page not found
Witajcie Fani WP,tworzę swój pierwszy w życiu plugin i stanąłem w miejscu jeżeli chodzi o stronę z ustawieniami wtyczki.
Używam Settings API i przy próbie przesłania formularza otrzymuję komunikat jak w temacie.
Przeszukałem fora i wątki -> chociaż ten: https://codex.wordpress.org/Function_Reference/register...
ale do tej pory nie udało mi się rozwiązać problemu.
Mój kod wygląda tak:
Klasa bluecarrot_admin
class bluecarrot_admin
{
private $page = '';
public function init()
{
// take action when plugin has been activated
register_activation_hook( BLUECARROT_FILE , array( 'bluecarrot_admin', 'activation' ) );
add_action('admin_menu', array( 'bluecarrot_admin', 'plugin_settings_page' ) );
add_action('admin_notices', array( 'bluecarrot_admin', 'activation_notice' ) );
add_action('admin_enqueue_scripts', array( 'bluecarrot_admin', 'admin_styles' ) );
add_action('admin_init', array( 'bluecarrot_admin', 'register_bluecarrot_options' ) );
preg_match('/^bluecarrot_([a-z_]+)$/' , $_GET['page'] , $match);
$this->page = $match[1];
if(method_exists( 'bluecarrot_admin' , 'register_'.$this->page.'_options'))
{ add_action('admin_init', array( 'bluecarrot_admin', 'register_'.$this->page.'_options' ) );
}
}
// CSS, dodanie arkusza styli wtyczki do panelu administratora
public function admin_styles()
{
wp_register_style( 'admin_css', BLUECARROT_URL . '/includes/backend/css/admin.css', false, '1.0.0' );
wp_enqueue_style( 'admin_css' );
}
public function plugin_settings_page()
{
// dodanie opcji wtyczki do glownego menu add_menu_page(
'Blue Carrot',
'Blue Carrot',
'manage_options',
'bluecarrot_settings',
array( 'bluecarrot_admin' , 'bluecarrot_settings_content'),
'dashicons-carrot'
);
add_submenu_page(
'bluecarrot_settings',
'Kategorie',
'Kategorie',
'manage_options',
'bluecarrot_categories',
'bluecarrot_categories_content' );
add_submenu_page(
'bluecarrot_settings',
'Kuchnie',
'Kuchnie',
'manage_options',
'bluecarrot_kitchens',
'bluecarrot_kitchens_content' );
add_submenu_page(
'bluecarrot_settings',
'Widoczność',
'Widoczność',
'manage_options',
'bluecarrot_styles',
'bluecarrot_styles_content' );
}
public function activation()
{ // function extecuted when plugin is activated
$notices['activation'] = 'Blue Carrot plugin has been activated. Please <a href="'.admin_url('admin.php?page=bluecarrot_settings').'">configure the plugin</a>.';
update_option('bluecarrot_notices', $notices);
}
public function activation_notice()
{ // function extecuted when plugin is activated
$notices = get_option('bluecarrot_notices');
if(isset($notices['activation']))
{
echo '<div class="notice notice-info is-dismissible"><p>'.$notices['activation'].'</p></div>';
delete_option('bluecarrot_notices');
}
}
public function bluecarrot_settings_content()
{
require_once (BLUECARROT_DIR . 'includes/backend/tpls/form_settings.php');
}
public function register_bluecarrot_options()
{
$settings = array();
$settings['content_place'] = 'prepend';
$settings['header_level'] = 'h3';
$settings['display_mode'] = 'floating';
add_option( 'bluecarrot_settings_options' , $settings);
}
public function register_settings_options()
{
register_setting('bluecarrot_settings', 'bluecarrot_settings', 'bluecarrot_settings_options_validate' );
add_settings_section('settings_section', 'Główne ustawienia', array( 'bluecarrot_admin' , 'settings_section_text'), 'bluecarrot_settings' );
$fields = array(
'contentplace' => 'Doklejaj treść',
'headerlevel' => 'Poziom nagłówka',
'displaymode' => 'Układ treści'
);
foreach($fields as $func => $text)
{
add_settings_field(
'bluecarrot_'.$func,
$text,
array( 'bluecarrot_admin' , 'bluecarrot_settings_'.$func.'_renderer'),
'bluecarrot_settings',
'settings_section'
);
}
}
public function settings_section_text()
{
echo '<p>Below are some examples of different option controls.</p>';
}
public function bluecarrot_settings_contentplace_renderer()
{
$options = get_option('bluecarrot_settings_options'); require_once( BLUECARROT_DIR .'includes/backend/tpls/field_settings_content_placeholder.php' );
}
public function bluecarrot_settings_headerlevel_renderer()
{
$options = get_option('bluecarrot_settings_options'); require_once( BLUECARROT_DIR .'includes/backend/tpls/field_settings_header_level.php' );
}
public function bluecarrot_settings_displaymode_renderer()
{
$options = get_option('bluecarrot_settings_options'); require_once( BLUECARROT_DIR .'includes/backend/tpls/field_settings_display_mode.php' );
}
public function bluecarrot_settings_options_validate($input)
{
return $input;
}
}
formularz dodawany przez polecenie require_once (BLUECARROT_DIR . 'includes/backend/tpls/form_settings.php');
wygląda tak:
// FORMULARZ
<div id="bluecarrot_settings_form" class="bluecarrot_form">
<h1>Blue Carrot - Ustawienia</h1>
<form action="options.php" method="post">
<?php settings_fields('bluecarrot_settings'); ?>
<?php do_settings_sections( 'bluecarrot_settings' ); ?>
<div class="submit">
<input name="submit" type="submit" class="button-primary" value="Zapisz zmiany" />
</div>
</form>
</div>
Formularz poprawnie się wyświetla, problem pojawia się jedynie przy próbie ich aktualizacji (po naciśnięciu przycisku "Zapisz zmiany").
Ktoś z Was boryka(ł) się z takim problemem? Jakieś sugestie?Ten post został edytowany przez Autora dnia 29.06.16 o godzinie 13:39