在管理员和前台之间共享功能

时间:2019-02-12 作者:dsj

我是新手。我正在构建一个插件,我从“支持名称空间和自动加载程序的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); 
    }

1 个回复
最合适的回答,由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

相关推荐