首先閱讀一下 wordpress plugin handbook
https://developer.wordpress.org/plugins/ 所有開發指南跟規範都在這裡.

使用plugin 範本創建工具 :https://wppb.me/

需要填寫6項資料 :
plugin name: 不用解釋了
plugin slug : 就是post 跟在網址後面那串字
,跟 plugin name 一樣OK
plugin URI : plugin 的位置
Author Name,Author Email , Author URI :作者資訊
可參考: https://developer.wordpress.org/plugins/plugin-basics/header-requirements/ 的說明


[Build Plugin] 下載範本,解壓縮就看到一個已經建好的plugin 範本結構

現在把整個 plugin目錄 拷貝(上傳)到 wordpress/wp-content/plugins 之下

這時候到你的wordpress網站,登入到管理後台,查看Plugins ,會發現你的 plugin 已經出現了

給 plugin 加上action links 如下圖的就是

要使用 add_filter plugin_action_links 來加入一個action link , 在 plugin-name.php 裡面加入以下代碼
add_filter( 'plugin_action_links_' . plugin_basename(__FILE__), 'catp_plugin_settings_link' );
function catp_plugin_settings_link( $links )
{
echo "<script> alert('123');</script>" ;
$url = 'https://www.google.com';
$_link = '<a href="'.$url.'" target="_blank">' . __( 'Setting', 'domain' ) . '</a>';
$links[] = $_link;
return $links;
}
active 你的 plugin 就可以看到多了一個 Setting 的 action link (只有當plugin 是 activated時才會出現)

如果要在 admin_bar 新增一個項目 :
add_action('admin_menu', 'catp_plugin_setup_menu');
function catp_plugin_setup_menu(){
add_menu_page( 'Test Plugin Page', 'CATP', 'manage_options', 'test-plugin', 'test_init' );
}
function test_init(){
echo "<h1>888</h1>";
}

如果要在 post 本身的末尾加上內容,要使用 ‘the_content’
function to_footer($content)
{
return $content . 'I am in the footer';
}
//if (is_admin()) { // this is wrong
if ( is_super_admin()) { //this is right way
add_action('the_content', 'to_footer');
}
注意 :if ( is_super_admin()) 我們只允許admin做動作 ,所以只有在admin登入的情況下,才會出現該內容

有關 wordpress 開發的 action , link , hook 等等 對第一次接觸的人來說,還真的有點不知從何開始,要一點時間熟悉 wordpress api 的用法. 經過一番的 google 跟 測試 , 終於完成第一個 wordpress plugin :
clone-and-translate-post
目前只是可以 work ,翻譯經過初步測試也還可以,離到達產品標準應該還有一點距離,有興趣可以一起來參與: https://github.com/jj449/clone-and-translate-post/upload/master
note :
menu出現位置?
1. add_options_page
function myplugin_register_options_page() {
add_options_page('catp options', 'catp options', 'manage_options', 'myplugin', 'myplugin_options_page');
}
add_action('admin_menu', 'myplugin_register_options_page');

2. add_menu_page
function catp_plugin_setup_menu(){
add_menu_page( 'Test Plugin Page', 'CATP', 'manage_options', 'test-plugin', 'test_init' );
}
add_action('admin_menu', 'catp_plugin_setup_menu');

3. add_submenu_page