WordPress插件开发的基本步骤如下:
/*
Plugin Name: My Plugin
Plugin URI: http://example.com/my-plugin
Description: My cool plugin.
Version: 1.0
Author: John Doe
Author URI: http://example.com
*/
// 添加菜单页面
add_action('admin_menu', 'my_plugin_add_menu');
function my_plugin_add_menu() {
add_menu_page(
'My Plugin',
'My Plugin',
'manage_options',
'my-plugin',
'my_plugin_options_page'
);
}
// 处理逻辑
function my_plugin_options_page() {
if (!current_user_can('manage_options')) {
wp_die('You do not have sufficient permissions to access this page.');
}
echo '<div class="wrap">';
echo '<h2>My Plugin Options</h2>';
echo '<p>Here is where the form would go if I actually had options.</p>';
echo '</div>';
}
// 添加设置页面
add_action('admin_init', 'my_plugin_settings_init');
function my_plugin_settings_init() {
register_setting(
'my-plugin-settings',
'my_plugin_settings'
);
add_settings_section(
'my-plugin-settings-section',
'My Plugin Settings',
'my_plugin_settings_section_callback',
'my-plugin'
);
add_settings_field(
'my-plugin-setting-name',
'Setting Name',
'my_plugin_setting_name_callback',
'my-plugin',
'my-plugin-settings-section'
);
// 添加更多设置字段
}
// 处理逻辑
function my_plugin_settings_section_callback() {
echo '<p>Enter your settings below:</p>';
}
function my_plugin_setting_name_callback() {
$options = get_option('my_plugin_settings');
echo '<input type="text" id="my-plugin-setting-name" name="my_plugin_settings[setting_name]" value="' . esc_attr($options['setting_name']) . '">';
}
// 添加短代码
add_shortcode('my-plugin-shortcode', 'my_plugin_shortcode_callback');
function my_plugin_shortcode_callback() {
return '<p>This is my plugin's shortcode!</p>';
}
// 添加小工具
add_action('widgets_init', 'my_plugin_register_widget');
function my_plugin_register_widget() {
register_widget('My_Plugin_Widget');
}
class My_Plugin_Widget extends WP_Widget {
public function __construct() {
parent::__construct(
'my_plugin_widget',
'My Plugin Widget',
array('description' => 'My Plugin Widget')
);
}
public function widget($args, $instance) {
echo $args['before_widget'];
echo '<h2>' . $instance['title'] . '</h2>';
echo '<p>This is my plugin's widget!</p>';
echo $args['after_widget'];
}
public function form($instance) {
$title = isset($instance['title']) ? $instance['title'] : '';
echo '<p>';
echo '<label for="' . $this->get_field_id('title') . '">Title:</label>';
echo '<input class="widefat" id="' . $this->get_field_id('title') . '" name="' . $this->get_field_name('title') . '" type="text" value="' . esc_attr($title) . '">';
echo '</p>';
}
public function update($new_instance, $old_instance) {
$instance = array();
$instance['title'] = (!empty($new_instance['title'])) ? strip_tags($new_instance['title']) : '';
return $instance;
}
}