Я кодировал свой самый первый плагин, чтобы делиться постами в Facebook и Instagram, и я писал страницу настроек плагинов.
Я всегда получаю сообщение об ошибке «Страница параметров не найдена».
я думал так register_setting
в функции обратного вызова может сделать трюк, но это не так.
Что я делаю неправильно?
Вот мой код:
<?php
class Socialize {
public function __construct() {
// Hook into the admin menu
add_action( 'admin_menu', array( $this, 'create_plugin_settings_page' ) );
add_action( 'admin_init', array( $this, 'setup_sections' ) );
add_action( 'admin_init', array( $this, 'setup_fields' ) );
}
public function setup_fields() {
add_settings_field( 'facebook_account', 'Facebook Username', array( $this, 'fb_account_callback' ), 'smashing_fields', 'facebook_section' );
add_settings_field( 'facebook_password', 'Facebook Password', array( $this, 'fb_pwd_callback' ), 'smashing_fields', 'facebook_section' );
add_settings_field( 'instagram_account', 'Instagram Username', array( $this, 'insta_account_callback' ), 'smashing_fields', 'instagram_section' );
add_settings_field( 'instagram_password', 'Instagram Password', array( $this, 'insta_pwd_callback' ), 'smashing_fields', 'instagram_section' );
}
public function setup_sections() {
add_settings_section( 'facebook_section', 'Facebook Account', array( $this, 'section_callback' ), 'smashing_fields' );
add_settings_section( 'instagram_section', 'Instagram Account', array( $this, 'section_callback' ), 'smashing_fields' );
}
public function fb_account_callback( $arguments ) {
echo '<input name="fb_account" id="fb_account" type="text" value="' . get_option( 'facebook_account' ) . '" />';
register_setting( 'smashing_fields', 'facebook_account' );
}
public function fb_pwd_callback( $arguments ) {
echo '<input name="fb_pwd" id="fb_pwd" type="password" value="' . get_option( 'facebook_password' ) . '" />';
register_setting( 'smashing_fields', 'facebook_password' );
}
public function insta_account_callback( $arguments ) {
echo '<input name="insta_account" id="insta_account" type="text" value="' . get_option( 'instagram_account' ) . '" />';
register_setting( 'smashing_fields', 'instagram_account' );
}
public function insta_pwd_callback( $arguments ) {
echo '<input name="insta_pwd" id="insta_pwd" type="password" value="' . get_option( 'instagram_password' ) . '" />';
register_setting( 'smashing_fields', 'instagram_password' );
}
public function section_callback( $arguments ) {
switch ( $arguments['id'] ) {
case 'facebook_section':
echo 'This is the Facebook section';
break;
case 'instagram_section':
echo 'This is the Instagram section';
break;
}
}
public function create_plugin_settings_page() {
// Add the menu item and page
$page_title = 'Free Socialize';
$menu_title = 'Free Socialize';
$capability = 'manage_options';
$slug = 'smashing_fields';
$callback = array( $this, 'plugin_settings_page_content' );
$icon = 'dashicons-admin-plugins';
$position = 100;
add_menu_page( $page_title, $menu_title, $capability, $slug, $callback, $icon, $position );
}
public function plugin_settings_page_content() { ?>
<div class="wrap">
<h2>Free Socialize Settings Page</h2>
<form method="post" action="options.php">
<?php
settings_fields( 'smashing_fields' );
do_settings_sections( 'smashing_fields' );
submit_button();
?>
</form>
</div> <?php
}
}
new Socialize();
?>
Я не могу комментировать, чтобы получить разъяснения, поэтому извинения, если я неправильно понял, но вам не нужно использовать add_plugins_page()
в этом случае?
<?php
add_plugins_page( $page_title, $menu_title, $capability, $menu_slug, $function);
?>
Docs: https://codex.wordpress.org/Function_Reference/add_plugins_page
Надеюсь, это поможет, и я поняла 🙂
Других решений пока нет …