我确实有一些PHP自定义函数,几乎每次都在我的应用程序上使用。这些函数并不都与WordPress相关,但有些函数与WordPress相关,因此需要先初始化WP,然后才能使用它们(例如,文本域的通用加载或自定义post查询)。
我希望能够在我所有的WP应用程序(主题和插件)中使用这些功能,我想知道哪里是放置它们的最佳位置。
我最初认为我可能会使用一个主父主题,它将是我所有网站上的父主题,但我不知道这是否足够,因为该主题只在插件之后加载,我不知道在加载主题之前是否会触发一些挂钩。
有什么想法吗?
我确实有一些PHP自定义函数,几乎每次都在我的应用程序上使用。这些函数并不都与WordPress相关,但有些函数与WordPress相关,因此需要先初始化WP,然后才能使用它们(例如,文本域的通用加载或自定义post查询)。
我希望能够在我所有的WP应用程序(主题和插件)中使用这些功能,我想知道哪里是放置它们的最佳位置。
我最初认为我可能会使用一个主父主题,它将是我所有网站上的父主题,但我不知道这是否足够,因为该主题只在插件之后加载,我不知道在加载主题之前是否会触发一些挂钩。
有什么想法吗?
由于您希望能够在主题和插件中使用这些功能,并且考虑到您对加载的评论,我建议使用以下方法。
将函数组织到库中-根据方法和方法,这可以是多个或单个文件。它可以是函数,也可以是类。
用条件检查包装函数或类,以确保它们尚未定义(以防无意中加载了两次)。if ( function_exists( ...
或if ( class_exists( ...
在插件或主题中建立一个点,检查是否存在关键函数或类,如果不存在,请使用include_once()
加载库文件。将其与插件或主题的初始化挂钩,这样您只需执行一次(虽然每个主题或插件都会进行检查,但如果已经加载,则只会加载一次)。例如:
if ( ! function_exists( \'my_cool_utility\' ) ) {
include_once( \'my_function_library.php\' );
}
这是我个人在开发免费和高级插件和主题时使用的一种方法。我有许多库可以在不同的产品之间重用,这些产品可以一起使用,也可以不一起使用。通过使用主题或插件打包库,我知道它将在那里,用户无需加载单独的内容即可使用它。
希望我能给你解释清楚。如果没有,请在评论中提出问题,我将尝试编辑以使其清晰。
然后将其作为插件,然后使用include();
在插件目录内或插件目录外的PHP文件中组织PHP自定义函数。
此外,您应该考虑将其用作Must Use plugin 如果站点严重依赖功能。
这是我的最终解决方案。感谢@butlerblog的提示。
我创建了一个组件包,可以包含在每个网站上(并随时更新新功能)。
这是composer.json
文件
{
"name": "tim/wp-utils",
"description": "WordPress utility functions",
"type": "component",
"version": "1.0.2",
"authors": [
{
"name": "Timothée Moulin",
"email": "timothee.moulin@gmail.com"
}
],
"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\';
更新WordPress时,是否可以自动删除默认主题(2111、2112、2113…)或禁用自动重新安装?我读过这个question 我知道很多人认为至少有一个这样的主题是有用的。但我从来没有用过这些东西,只是想让它们消失;)