From 0796e8e638762b73422444d2d6c94fd02c4e61d0 Mon Sep 17 00:00:00 2001 From: Tom McFarlin Date: Wed, 30 Oct 2013 16:49:01 -0400 Subject: [PATCH] moving all of the admin-specific functionality into the admin subdirectory related #100 --- plugin-name/admin/assets/css/admin.css | 1 + plugin-name/admin/assets/css/index.php | 1 + plugin-name/admin/assets/js/admin.js | 10 + plugin-name/admin/assets/js/index.php | 1 + plugin-name/admin/class-plugin-name-admin.php | 232 ++++++++++++++++++ plugin-name/admin/views/admin.php | 23 ++ plugin-name/admin/views/index.php | 1 + 7 files changed, 269 insertions(+) create mode 100644 plugin-name/admin/assets/css/admin.css create mode 100644 plugin-name/admin/assets/css/index.php create mode 100644 plugin-name/admin/assets/js/admin.js create mode 100644 plugin-name/admin/assets/js/index.php create mode 100644 plugin-name/admin/class-plugin-name-admin.php create mode 100644 plugin-name/admin/views/admin.php create mode 100644 plugin-name/admin/views/index.php diff --git a/plugin-name/admin/assets/css/admin.css b/plugin-name/admin/assets/css/admin.css new file mode 100644 index 0000000..a5854ad --- /dev/null +++ b/plugin-name/admin/assets/css/admin.css @@ -0,0 +1 @@ +/* This stylesheet is used to style the admin option form of the plugin. */ \ No newline at end of file diff --git a/plugin-name/admin/assets/css/index.php b/plugin-name/admin/assets/css/index.php new file mode 100644 index 0000000..e71af0e --- /dev/null +++ b/plugin-name/admin/assets/css/index.php @@ -0,0 +1 @@ + + * @license GPL-2.0+ + * @link http://example.com + * @copyright 2013 Your Name or Company Name + */ + +/** + * Plugin class. This class should ideally be used to work with the + * administrative side of the WordPress site. + * + * If you're interested in introducing public-facing + * functionality, then refer to `class-plugin-name.php` + * + * TODO: Rename this class to a proper name for your plugin. + * + * @package Plugin_Name_Admin + * @author Your Name + */ +class Plugin_Name_Admin { + + /** + * Instance of this class. + * + * @since 1.0.0 + * + * @var object + */ + protected static $instance = null; + + /** + * Slug of the plugin screen. + * + * @since 1.0.0 + * + * @var string + */ + protected $plugin_screen_hook_suffix = null; + + /** + * Initialize the plugin by loading admin scripts & styles and adding a + * settings page and menu. + * + * @since 1.0.0 + */ + private function __construct() { + + /* + * Call $plugin_slug from public plugin class. + * + * TODO: + * + * - Rename "Plugin_Name" to the name of your initial plugin class + * + */ + $plugin = Plugin_Name::get_instance(); + $this->plugin_slug = $plugin->get_plugin_slug(); + + // Load admin style sheet and JavaScript. + add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_admin_styles' ) ); + add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_admin_scripts' ) ); + + // Add the options page and menu item. + add_action( 'admin_menu', array( $this, 'add_plugin_admin_menu' ) ); + + // Add an action link pointing to the options page. + $plugin_basename = plugin_basename( plugin_dir_path( __FILE__ ) . $this->plugin_slug . '.php' ); + add_filter( 'plugin_action_links_' . $plugin_basename, array( $this, 'add_action_links' ) ); + + /* + * Define custom functionality. + * + * Read more about actions and filters: + * http://codex.wordpress.org/Plugin_API#Hooks.2C_Actions_and_Filters + */ + add_action( 'TODO', array( $this, 'action_method_name' ) ); + add_filter( 'TODO', array( $this, 'filter_method_name' ) ); + + } + + /** + * Return an instance of this class. + * + * @since 1.0.0 + * + * @return object A single instance of this class. + */ + public static function get_instance() { + + // If the single instance hasn't been set, set it now. + if ( null == self::$instance ) { + self::$instance = new self; + } + + return self::$instance; + } + + /** + * Register and enqueue admin-specific style sheet. + * + * TODO: + * + * - Rename "Plugin_Name" to the name your plugin + * + * @since 1.0.0 + * + * @return null Return early if no settings page is registered. + */ + public function enqueue_admin_styles() { + + if ( ! isset( $this->plugin_screen_hook_suffix ) ) { + return; + } + + $screen = get_current_screen(); + if ( $this->plugin_screen_hook_suffix == $screen->id ) { + wp_enqueue_style( $this->plugin_slug .'-admin-styles', plugins_url( 'assets/css/admin.css', __FILE__ ), array(), Plugin_Name::VERSION ); + } + + } + + /** + * Register and enqueue admin-specific JavaScript. + * + * TODO: + * + * - Rename "Plugin_Name" to the name your plugin + * + * @since 1.0.0 + * + * @return null Return early if no settings page is registered. + */ + public function enqueue_admin_scripts() { + + if ( ! isset( $this->plugin_screen_hook_suffix ) ) { + return; + } + + $screen = get_current_screen(); + if ( $this->plugin_screen_hook_suffix == $screen->id ) { + wp_enqueue_script( $this->plugin_slug . '-admin-script', plugins_url( 'assets/js/admin.js', __FILE__ ), array( 'jquery' ), Plugin_Name::VERSION ); + } + + } + + /** + * Register the administration menu for this plugin into the WordPress Dashboard menu. + * + * @since 1.0.0 + */ + public function add_plugin_admin_menu() { + + /* + * Add a settings page for this plugin to the Settings menu. + * + * NOTE: Alternative menu locations are available via WordPress administration menu functions. + * + * Administration Menus: http://codex.wordpress.org/Administration_Menus + * + * TODO: + * + * - Change 'Page Title' to the title of your plugin admin page + * - Change 'Menu Text' to the text for menu item for the plugin settings page + * - Change 'manage_options' to the capability you see fit + * For reference: http://codex.wordpress.org/Roles_and_Capabilities + */ + $this->plugin_screen_hook_suffix = add_options_page( + __( 'Page Title', $this->plugin_slug ), + __( 'Menu Text', $this->plugin_slug ), + 'manage_options', + $this->plugin_slug, + array( $this, 'display_plugin_admin_page' ) + ); + + } + + /** + * Render the settings page for this plugin. + * + * @since 1.0.0 + */ + public function display_plugin_admin_page() { + include_once( 'views/admin.php' ); + } + + /** + * Add settings action link to the plugins page. + * + * @since 1.0.0 + */ + public function add_action_links( $links ) { + + return array_merge( + array( + 'settings' => '' . __( 'Settings', $this->plugin_slug ) . '' + ), + $links + ); + + } + + /** + * NOTE: Actions are points in the execution of a page or process + * lifecycle that WordPress fires. + * + * Actions: http://codex.wordpress.org/Plugin_API#Actions + * Reference: http://codex.wordpress.org/Plugin_API/Action_Reference + * + * @since 1.0.0 + */ + public function action_method_name() { + // TODO: Define your action hook callback here + } + + /** + * NOTE: Filters are points of execution in which WordPress modifies data + * before saving it or sending it to the browser. + * + * Filters: http://codex.wordpress.org/Plugin_API#Filters + * Reference: http://codex.wordpress.org/Plugin_API/Filter_Reference + * + * @since 1.0.0 + */ + public function filter_method_name() { + // TODO: Define your filter hook callback here + } + +} diff --git a/plugin-name/admin/views/admin.php b/plugin-name/admin/views/admin.php new file mode 100644 index 0000000..1698a14 --- /dev/null +++ b/plugin-name/admin/views/admin.php @@ -0,0 +1,23 @@ + + * @license GPL-2.0+ + * @link http://example.com + * @copyright 2013 Your Name or Company Name + */ +?> + +
+ + +

+ + + +
diff --git a/plugin-name/admin/views/index.php b/plugin-name/admin/views/index.php new file mode 100644 index 0000000..e71af0e --- /dev/null +++ b/plugin-name/admin/views/index.php @@ -0,0 +1 @@ +