Jakub Sołowiej

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