При разработке собственного модуля удобно начинать не с чистого листа, а типового черновика. Можно сразу же сосредоточиться на написании полезного кода, а не рыскать по мануалам и чужим модулям, выискивая реализации типовых секций вроде инсталляции / деинсталляции модуля.
Итак, каркас типового модуля wordpress. Чуть более 100 строк кода, предполагают шаблон реализации следующих частей модуля:
- Действия при инсталляции модуля.
- Действия при удалении модуля.
- Создание страницы с параметрами модуля в секции админки — «параметры».
- Шаблон зацепки для этапа инициализации страницы (секция init), когда движок и модули уже загружены, но обработка шаблона ещё не начата.
Архив каркаса типового модуля.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 |
<?php /* Plugin Name: Plugin URI: http:// Description: Author: AuthorName <Author@Mail> Author URI: http:// Version: 1.0 */ class ModuleClass { var $options; //to do ... other class vars public function __construct() { //Actions add_action('admin_menu', array($this, '_add_menu')); add_action('init', array($this, 'init_hook'), 0); $this->options = get_option('...'); //to do ... other actions and necessary inits } /* admin_menu hook */ public function _add_menu() { add_options_page('Params module page', 'Params module page', 8, __FILE__, array($this, '_options_page')); } /* init hook */ public function init_hook() { global $user_ID, $user_login; // to do ... } /* Options admin page */ public function _options_page() { global $wpdb, $table_prefix; switch ($_POST['action']) { case 'save_settings': //delete service fields unset($_POST['action'], $_POST['sbm']); // to do ... validate new settings update_option('...', $_POST); $this->options = $_POST; echo '<div><p>' . __("Setting are updated.") . '</p></div>'; break; case 'some other actoins ...': //do some actions } $acs = $this->options; ?> <div> <h2><?=__('Your module settings title');?></h2> <form method="post"> <input type="hidden" name="action" value="save_settings" /> <fieldset> <legend></legend> <!-- To do ... form fields --> </fieldset> <input type="submit" name="sbm" value="<?=__('Do')?>" /> </form> <h2><?=__('Do some actions');?></h2> </div> <?php } /* install actions (when activate first time) */ static function install() { global $wpdb; //create table(s) if it needs any $wpdb->query(" CREATE TABLE IF NOT EXISTS `...` ( ... ) ENGINE=MyISAM DEFAULT CHARSET=utf8; "); //set defaults add_option('...', ModuleClass::default_settings() ); } /* Default settings */ static function default_settings() { return array( 'option1' => 'value', ... ); } /* uninstall hook */ static function uninstall() { global $wpdb; //drop created tables and delete module options $wpdb->query("DROP TABLE IF EXISTS `...`"); delete_option('...'); } } register_uninstall_hook( __FILE__, array('ModuleClass', 'uninstall')); register_activation_hook( __FILE__, array('ModuleClass', 'install') ); if (class_exists("ModuleClass")) { $module_obj = new ModuleClass(); } if (isset($module_obj)) { //to do ... ; } // if (isset($module_obj)) |