我是新手。我正在构建一个插件,我从“支持名称空间和自动加载程序的Wordpress插件样板”开始
我甚至成功地为我已经开始工作的RESTful界面添加了一个部分。然而,我有一些在管理、前端和REST界面之间通用的功能。将这些常见功能放在/inc/common
文件夹但我不能让它工作。
对于一个更有经验的OOPs程序员来说,这可能很清楚,但我在web上找不到任何指导。这些功能/方法应该如何实现?包装在/inc/common
他们应该如何称呼?
插件包含文件夹:
/inc/admin -contains class admin
/inc/frontend -contains class frontend
/inc/libraries -contains class autoloader
/inc/core - contains class activator/deactivator/int/loader
/inc/common - empty folder
/inc/rest (I added)
我尝试过将函数放在/int/common/common的文件中。php:
function common(){
do something
}
从类admin/frontend/rest中包含它们-这不起作用。我已尝试将函数包装在一个公共类中:
class common{
public function common(){
do something
}
}
那里运气不好。我把它弄得太脏了,我不得不从一个正在工作的备份恢复到上周的状态,所以我加载了我的代码尝试。我正在寻找一些关于如何实现这一点的线索,因为很明显,我在这里遗漏了一些重要的东西。
尽可能地重现我所拥有的:
函数在/inc/rest/class rest中
namespace PGC_Signoffs\\Inc\\Rest;
class Rest {
public function glider_club_update_signoff( \\WP_REST_Request $request) {
include_once plugin_dir_path( __DIR__ ) . \'common/common.php\';
$date_expire = $common_function($a,$b,$c);
}
}
inc/common/common中的函数。php
public common_function( $a, $b, c){
// function to calculate the expire date.
return($start_date);
}
最合适的回答,由SO网友:Fabrizio Mele 整理而成
那个样板使用自动加载,好好利用它!我知道这有点让人不知所措,但通过一些培训,你会意识到自动加载和面向对象编程(OOP)是一种极大的生产力提升。
在…内inc/common
创建类(例如,class-commonclass.php
)
<?php
namespace PGC_Signoffs\\Inc\\Common; \\\\declare the namespace for autoloading
class CommonClass {
public function commonFunction($a,$b,$c){ //could also be \'public static function\'
//do your magic
return $start_date;
}
}
注:内部功能
CommonClass
可以是静态的,这取决于您想对类执行什么操作。如果它只是一个函数集合,那么就使用static。
然后在其他类中实例化该类,例如Admin
:
<?php
namespace PGC_Signoffs\\Inc\\Rest;
use PGC_Signoffs\\Inc\\Common\\CommonClass; //declare you will be using CommonClass from the Inc\\Common namespace
class Rest{
...
public function glider_club_update_signoff( \\WP_REST_Request $request) {
$commonClass = new CommonClass();
$date_expire = $commonClass->commonFunction($a,$b,$c);
//or, if you went with a static function:
$date_expire = CommonClass::commonFunction($a,$b,$c);
}
}
Here\'s the gist