arraypress / unhooker
简化了WordPress动作和过滤器的批量移除,支持动态、条件性移除,适用于增强插件和主题的开发。
dev-main
2024-04-30 20:07 UTC
Requires
- php: ^7.4 || ^8.0
This package is auto-updated.
Last update: 2024-09-18 20:04:35 UTC
README
Unhooker库提供了一个强大的解决方案,用于动态管理和移除WordPress钩子,侧重于条件逻辑。此库使开发者能够有效地控制WordPress动作和过滤器,确保WordPress行为的精确定制,非常适合复杂插件或主题的开发。
特性
- 动态钩子管理:自动从WordPress钩子中移除或修改动作和过滤器。
- 条件逻辑:利用回调函数,根据自定义逻辑条件性地移除动作或设置过滤器。
- 全局条件:应用全局条件,影响所有钩子修改。
- 错误处理:包括强大的错误处理能力,在钩子操作过程中优雅地管理和记录问题。
- 调试支持:跟踪动作和过滤器的所有修改,有助于调试并确保透明度。
- 灵活使用:针对WordPress设计,非常适合需要插件或主题中高级钩子控制的开发者。
最低要求
- PHP:7.4 或更高版本
- WordPress:5.0 或更高版本
安装
Unhooker 是一个开发者库,不是WordPress插件,因此需要将其包含在您的WordPress项目或插件中。
您可以使用Composer安装它
composer require arraypress/unhooker
基本文件包含
// Require the Composer autoloader. require_once __DIR__ . '/vendor/autoload.php'; // Use the functions from the ArrayPress\Utils namespace. use function ArrayPress\Utils\Unhooker\remove_actions; use function ArrayPress\Utils\Unhooker\remove_filters; use function ArrayPress\Utils\Unhooker\set_filters; use function ArrayPress\Utils\Unhooker\remove_class_hooks;
移除动作和过滤器
基本移除
无条件立即移除动作或过滤器
remove_actions( [ 'init' => 'wp_cron' ] ); remove_filters( [ 'the_content' => 'wpautop' ] );
类方法移除
// Example class to add and then remove hooks. class Example_Class { public static function init_hooks() { add_action( 'wp_footer', [ self::class, 'footer_action' ], 10 ); } public static function footer_action() { echo '<p>This will be removed by the Unhooker.</p>'; } } // Initialize hooks by the class. Example_Class::init_hooks(); remove_class_hooks( [ [ 'hook' => 'wp_footer', 'class_name' => 'Example_Class', 'method_name' => 'footer_action', ] ], 'init' );
高级移除
在一次调用中移除多个动作,每个动作都有特定的条件和优先级。
remove_actions( [ [ 'hook' => 'wp_head', 'function' => 'wp_generator', 'priority' => 1 ], [ 'hook' => 'wp_head', 'function' => 'rel_canonical' ], [ 'hook' => 'wp_footer', 'function' => 'wp_print_footer_scripts', 'priority' => 20 ] ], 'wp_loaded', 15 );
条件和延迟移除
仅在满足特定条件时移除动作,并将其绑定到特定钩子,并具有自定义优先级
remove_actions([ [ 'hook' => 'wp_footer', 'function' => 'wp_print_footer_scripts', 'priority' => 20 ] ], 'wp_loaded', 15, function() { return is_page( 'home' ); } );
条件移除
remove_actions( [ [ 'hook' => 'wp_head', 'function' => 'wp_generator' ] ], 'wp', 10, function() { return is_singular('download'); } );
设置过滤器
基本过滤器设置
立即应用返回布尔值的过滤器
set_filters( [ 'show_admin_bar' => false ] ); // Apply multiple filters, each with specific conditions and priorities. set_filters([ 'show_admin_bar' => [ 'value' => false, 'condition' => function() { return ! current_user_can( 'administrator' ); } ], 'excerpt_length' => [ 'value' => 20, 'condition' => function() { return is_home(); } ] ], 'init', 20, function() { return is_user_logged_in(); } );
在特定钩子处条件性地应用过滤器
仅在满足特定条件时在特定钩子处应用过滤器
set_filters( [ 'show_admin_bar' => false ], 'init', 20, function() { return ! is_user_logged_in(); } );
带有错误处理的先进过滤器设置
带有错误处理和条件逻辑设置过滤器
set_filters( [ 'comment_post' => true ], 'comments_open', 10, function() { return current_user_can( 'moderate_comments' ); }, function( $error ) { error_log(' Failed to set filter: ' . $error->getMessage() ); } );
贡献
对此库的贡献非常受欢迎。在GitHub上提出问题或提交修复错误或新特性的拉取请求。分享反馈和建议以改进。
许可证:GPLv2 或更高版本
本程序是自由软件;您可以按照自由软件基金会发布的GNU通用公共许可证的条款重新分配和/或修改它;许可证的第2版,或者(根据您的选择)任何更高版本。
本程序以希望它将是有用的目的进行分发;但没有任何保证;甚至没有关于适销性或特定用途的隐含保证。有关详细信息,请参阅GNU通用公共许可证。