WordPress 笔记
WordPress用钩子将插件“勾进”WordPress系统中,让插件与WordPress相连接。也就是说,通过钩子,WordPress能够在特定时间内调用插件中的函数,让插件开始运行。下面是钩子的两种形式:
-
动作(Actions):在系统运行的某些特定时间点或发生特定事件时,WordPress核心程序会调用一些钩子。这里WordPress所调用的钩子被称为“动作”。插件用动作API来指定在上述特定时间点内需要执行的PHP函数。
-
过滤器(Filters):WordPress将不同类型文本添加到数据库或发送给浏览器窗口前,需要调用一些钩子来修改上述不同类型文本。这里WordPress所调用的钩子被称为“过滤器”。通过使用滤器API,插件可以执行一个或多个PHP函数以修改上述不同类型文本。
有时我们可以直接通过动作或过滤器实现以上效果。例如,如果我们希望用插件来改变某篇日志内容,可以为publish_post添加一个动作函数(保存到数据库时修改日志),也可以为the_content添加一个过滤器函数(显示到浏览器窗口时修改日志)。
过滤器函数
has_filters()
has_filter(string $tag, callback $function_to_check );//检查是否已经注册过滤器钩子。https://codex.wordpress.org/Function_Reference/has_filters
add_filter()
add_filter(string $tag, callable $function_to_add, int $priority = 10, int $accepted_args = 1 );//将功能或方法挂钩到特定的过滤器操作。https://developer.wordpress.org/reference/functions/add_filter/
apply_filters()
apply_filters( string $tag, mixed $value );//调用添加到过滤器钩子的功能。https://developer.wordpress.org/reference/functions/apply_filters/
current_filter()
current_filter();//检索当前过滤器或操作的名称。https://codex.wordpress.org/Function_Reference/current_filter
remove_filter()
remove_filter( $tag, $function_to_remove, $priority );//删除附加到特定过滤器钩子的默认函数。https://codex.wordpress.org/Function_Reference/remove_filter
remove_all_filters()
remove_all_filters( $tag, $priority );//从过滤器中取出所有的钩子。https://codex.wordpress.org/Function_Reference/remove_all_filters
动作函数
has_action()
has_action( $tag, $function_to_check );//检查挂钩是否已经注册了指定动作。https://codex.wordpress.org/Function_Reference/has_action
add_action()
add_action('hook_name','自定义函数名',['执行次序数,越小越后'],['接收函数的协议'] );//挂钩一个特定动作的功能//将自定义的动作函数勾入WordPress//hook_name动作钩子的名称。https://developer.wordpress.org/reference/functions/add_action/
do_action()
do_action(string $tag,$arg='');//执行挂钩在特定钩子上的功能。https://developer.wordpress.org/reference/functions/do_action/
do_action_ref_array()
do_action_ref_array( $tag, $args );//此函数与do_action相同,但传递给挂钩到$tag的函数的参数是使用数组提供的。https://codex.wordpress.org/Function_Reference/do_action_ref_array
did_action()
did_action('动作挂钩的名称');//检索触发动作的次数。https://codex.wordpress.org/Function_Reference/did_action
remove_action()
remove_action($tag,$function_to_remove,$priority);//删除附加到指定动作钩子的函数。https://codex.wordpress.org/Function_Reference/remove_action
remove_all_actions()
remove_all_actions($tag,$priority);//从动作中删除所有的钩子。https://codex.wordpress.org/Function_Reference/remove_all_actions
wpjam 笔记
//菜单
wpjam_admin_menu() //构建菜单//位于 basic/include/admin/admin-menus.php 中
add_action( 'admin_menu', 'wpjam_basic_admin_menu',9 );
wpjam_list_table() //构建表格
wpjam_field_html()
add_filter('wpjam_pages', 'wpjam_debug_admin_pages');
add_filter('wpjam_network_pages', 'wpjam_debug_admin_pages');
function wpjam_debug_admin_pages($wpjam_pages){
$capability = (is_multisite())?'manage_site':'manage_options';
$wpjam_pages['wpjam-debug'] = array(
'menu_title' => 'Debug',
'capability' => $capability,
'icon' => 'dashicons-carrot',//参考:https://developer.wordpress.org/resource/dashicons/#translation
'position' => '25.1'
);
return $wpjam_pages;
}
// 在插件页面添加快速设置链接
add_filter('plugin_action_links_' . plugin_basename(WEIXIN_ROBOT_PLUGIN_FILE), 'weixin_robot_plugin_action_links', 10, 2);
function weixin_robot_plugin_action_links($links, $file)
{
$links['setting'] = '<a href="' . admin_url('admin.php?page=weixin-robot') . '">设置</a>';
if (strpos(WEIXIN_ROBOT_PLUGIN_FILE, 'weixin-robot-test')) {
$links['info'] = '<span style="color:red; font-weight:bold;">测试版</span>';
} else {
$links['info'] = '<span style="color:green; font-weight:bold;">正式版</span>';
}
return array_reverse($links);
}
研究项
weixin_robot_include_extends() //通过get_option('weixin-robot-extends')加载了plugins/weixin-robot-advanced/extends/或其下admin/各项文件(每次只加载一个目录下的文件)
register_activation_hook
wp_parse_args 似乎替代了 array_merge
shortcode_atts
extract 使用数组键名作为变量名,使用数组键值作为变量值,数组中的每个元素,将在当前符号表中创建对应的一个变量
add_filter('manage_users_columns')
add_filter('manage_users_custom_column')
add_filter user_search_columns
opcache_reset
opcache_get_status
maybe_serialize
插件积累
-
当插件被禁用时,希望会有为用户保护数据以方便下次启用时候继续使用,未清理数据库的消息(提供SQL指令),插件被禁用时,发送消息无效。尝试插件启用时发送消息,也无效。解决这种提示的
-
仪表盘中,增加简单的统计数字小工具
-
选项卡下的各项操作
-
github page builder some better eg
{"usabilitydynamics/lib-ui": "*"}
composer require "wpackagist-plugin/advanced-custom-fields" #高级自定义字段,十分强大的自定义字段
composer require "wpackagist-plugin/acf-to-rest-api" #高级自定义字段插件的增强插件,管理接口字段
composer require "wpackagist-plugin/rest-api-filter-fields" #可以通过参数定义只传递什么字段的插件
composer require "wpackagist-plugin/shortcodes-ultimate" #终极简码 非常全面还能附加一些组件扩展功能
composer require "wpackagist-plugin/debug-bar" #一个方便的调试工具面板
composer require "wpackagist-plugin/blackbox-debug-bar" #一个方便的调试工具面板
composer require "wpackagist-plugin/piklist" #一个基于代码的插件主题开发框架
composer require "wpackagist-plugin/wp-helpers" #基于piklist开发的工具插件能进行有系列定制
composer require "wpackagist-plugin/wp-log-viewer" #一个方便的自带搜索功能体验友好的Error日志插件工具
composer require "wpackagist-plugin/wpjam-basic" #我爱水煮鱼基础优化插件
composer require "wpackagist-plugin/woocommerce" #电子商务插件
composer require "wpackagist-plugin/contact-form-7" #非常强大的联系表单插件,目前是发送邮件也许可扩展至保存到数据库
composer require "wpackagist-plugin/my-custom-functions" #一个可以添加自定义函数的插件,还未试用
composer require "wpackagist-plugin/smtp-mailer" #发送邮件的插件
composer require "wpackagist-plugin/the-events-calendar" #行事历
composer require "wpackagist-plugin/wp-redis" #缓存插件,基于redis技术
composer require "wpackagist-plugin/wp-super-cache" #缓存插件,基于文件存储的技术
项目经验教训
你不知道老板说的要求到底到什么程度,你专注与功能细节时,她考虑的是好不好看。 后面慢慢完善的是BUG,而不是提出来的功能。
框架搜集和经验总结
https://github.com/wpbones/WPBones 是一个通过改变自身形成新插件的开发框架 参考laravel使用,还不错的思路,但是没有彻底完成,多个参考此框架的插件可能会有冲突。