jascha030/wp-subscriptions

此包已被废弃,不再维护。未建议替代包。

用于使用WP插件API(钩子)的OOP接口

2.0.1 2020-06-14 18:00 UTC

This package is auto-updated.

Last update: 2021-08-28 04:36:29 UTC


README

用于与Wordpress插件通用API(钩子)交互的后台。跟踪操作和过滤器,并使挂钩或取消挂钩类方法变得容易。

入门

要求

  • composer
  • php >= 7.1

此包未考虑Wordpress编码标准,因此与php 5.3或任何其他版本不兼容

安装

composer require jascha030/wp-subscriptions

使用方法

提供者

两种基本类型的提供者是ActionProviderFilterProvider接口。这些接口是SubscriptionProvider接口的衍生。

这些接口不需要实现任何方法,并由WordpressSubscriptionContainer和其他核心逻辑使用,以识别Wordpress插件中的类。

这些提供者使用一个静态属性,告诉订阅管理器将特定方法挂钩到WP插件钩子。

操作

public static $actions = []; // ActionProvider interface

过滤器

public static $filters = []; // FilterProvider interface

提供者示例

class ExampleProvider implements ActionProvider
{
    public static $actions = [
        'plugins_loaded' => 'load', // Hook => method
        'pre_get_posts' => ['doQueryStuff', 10, 1], // Example with priority and number of arguments
        'wp_loaded' => [
            ['loaded'],
            ['moreLoaded']
        ], // Example of multiple methods hooked to one action hook
    ];
    
    public function load() // Method to be hooked to the plugins_loaded hook
    {
        echo "This is a method that loads stuff...";
    }

    public function doQueryStuff()
    {
        // hmmm, doing lots of querylicious stuff
    }
    
    public function loaded()
    {
        // Much load, such wow, very plugadocious
    }
    
    public function moreLoaded()
    {
        // Will it ever stop??
    }
}

此示例显示了一个基本的ActionProvider,一个类也可以同时实现ActionProvider和FilterProvider。

注册提供者

$subscriptionContainer = WordpressSubscriptionContainer::getInstance(); // Get container instance

$subscriptionContainer->register(ExampleProvider::class); // Register provider

$subscriptionContainer->run(); // Hook all providers and their methods to hooks

信息和灵感

订阅想法提供了灵活性,因此你不必在OOP Wordpres插件中过度使用单例模式。现在你不需要为每个实例扩展类(例如:当你构建一个帖子类型类时,你可以创建一个配置,其中包含可以循环的帖子类型,而不是必须为每个帖子类型创建单独的类)。

基于这篇由Carl Alexander撰写的文章中的想法。