可重复使用的功能和工具(框架)

时间:2020-03-05 作者:Tim

我确实有一些PHP自定义函数,几乎每次都在我的应用程序上使用。这些函数并不都与WordPress相关,但有些函数与WordPress相关,因此需要先初始化WP,然后才能使用它们(例如,文本域的通用加载或自定义post查询)。

我希望能够在我所有的WP应用程序(主题和插件)中使用这些功能,我想知道哪里是放置它们的最佳位置。

我最初认为我可能会使用一个主父主题,它将是我所有网站上的父主题,但我不知道这是否足够,因为该主题只在插件之后加载,我不知道在加载主题之前是否会触发一些挂钩。

有什么想法吗?

3 个回复
最合适的回答,由SO网友:butlerblog 整理而成

由于您希望能够在主题和插件中使用这些功能,并且考虑到您对加载的评论,我建议使用以下方法。

将函数组织到库中-根据方法和方法,这可以是多个或单个文件。它可以是函数,也可以是类。

用条件检查包装函数或类,以确保它们尚未定义(以防无意中加载了两次)。if ( function_exists( ...if ( class_exists( ...

在插件或主题中建立一个点,检查是否存在关键函数或类,如果不存在,请使用include_once() 加载库文件。将其与插件或主题的初始化挂钩,这样您只需执行一次(虽然每个主题或插件都会进行检查,但如果已经加载,则只会加载一次)。例如:

if ( ! function_exists( \'my_cool_utility\' ) ) { include_once( \'my_function_library.php\' ); }

通过这种方式,您可以跨多个主题和插件使用库,这些主题和插件可以一起使用,也可以不一起使用,同时确保(1)代码存在并且可用,(2)避免多次加载的问题。

这是我个人在开发免费和高级插件和主题时使用的一种方法。我有许多库可以在不同的产品之间重用,这些产品可以一起使用,也可以不一起使用。通过使用主题或插件打包库,我知道它将在那里,用户无需加载单独的内容即可使用它。

希望我能给你解释清楚。如果没有,请在评论中提出问题,我将尝试编辑以使其清晰。

SO网友:TomC

然后将其作为插件,然后使用include(); 在插件目录内或插件目录外的PHP文件中组织PHP自定义函数。

此外,您应该考虑将其用作Must Use plugin 如果站点严重依赖功能。

SO网友:Tim

这是我的最终解决方案。感谢@butlerblog的提示。

我创建了一个组件包,可以包含在每个网站上(并随时更新新功能)。

这是composer.json 文件

    {
        "name": "tim/wp-utils",
        "description": "WordPress utility functions",
        "type": "component",
        "version": "1.0.2",
        "authors": [
            {
                "name": "Timothée Moulin",
                "email": "[email protected]"
            }
        ],
        "require": {
            "php": ">=7.3",
            "robloach/component-installer": "*"
        },
        "extra": {
            "component": {
                "files": [
                    "*"
                ]
            }
        }
    }
请注意robloach/component-installer 要求和extra component 配置这允许我将“插件”放在我的应用程序中任何符合逻辑的地方(而不是供应商目录)。

在我的插件文件中,我用function_exists 检查

<?php
if (!function_exists(\'my_utility_function\')) {
    function my_utility_function() {
        // @todo
    }
}
然后在每个插件中plugin.php 和主题functions.php 文件I包括实用程序文件

<?php require_once WP_CONTENT_DIR . \'/components/wp-utils/wp-utils.php\';

相关推荐

How to delete default themes

更新WordPress时,是否可以自动删除默认主题(2111、2112、2113…)或禁用自动重新安装?我读过这个question 我知道很多人认为至少有一个这样的主题是有用的。但我从来没有用过这些东西,只是想让它们消失;)