arraypress/unhooker

简化了WordPress动作和过滤器的批量移除,支持动态、条件性移除,适用于增强插件和主题的开发。

dev-main 2024-04-30 20:07 UTC

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通用公共许可证。