Wordpress插件(Singleton) - 无法添加新的WooCommerce端点和flush_rewrite_rules

时间:2017-02-08 14:13:20

标签: php wordpress woocommerce endpoints

我正在构建一个Wordpress插件(结构化为Singleton),当激活时,会插入三个新的WooCommerce端点(每个端点都存储在一个包含端点类的单独文件中)。最后,调用强制flush_rewrite_rules()。刷新必须在发生后插入三个端点,或者在访问时端点将为404。

我想避免激活4个单独的插件(我的插件+ 3个端点插件)。如果可能的话,只需要一个插件激活就可以了。

到目前为止:

我的插件激活正常,端点会在视觉上显示“'在导航中确定,但访问时 404。,需要手动刷新。

关键问题是:

  1. 我的Singleton插件中的三个Endpoint类文件最适合include?插件顶部?在__construct里面?或者在插件之后?
  2. 最好在包括它们之后调用类?
  3. 如何确保在插入三个新端点后调用flush_rewrite_rules 。在flush_rewrite_rules()内拨打register_activation_hook()似乎无法修复404ing端点。
  4. 这是我抽象的代码:

    /* Include endpoint files here? */
    include_once( plugin_dir_path( __FILE__ ) . 'classes/endpoint1.php');
    include_once( plugin_dir_path( __FILE__ ) . 'classes/endpoint2.php');
    include_once( plugin_dir_path( __FILE__ ) . 'classes/endpoint3.php');
    
    
    class My_Plugin {
    
    private $endpoint1 = null;
    private $endpoint2 = null;
    private $endpoint3 = null;
    
    private static $instance;
    
    public static function getInstance() {
      if (self::$instance == NULL) {
        self::$instance = new self();
      }
    
      return self::$instance;
    }
    
    private function __construct() {
      /*Call the endpoint classes here? */
      $this->$endpoint1 = new Endpoint1();
      $this->$endpoint1 = new Endpoint2();
      $this->$endpoint1 = new Endpoint3();
    }
    public static function install() {
      flush_rewrite_rules();
    }
    } /*End Class*/
    
    My_Class::getInstance();
    
    /*Flush rewrite rules here? */
    register_activation_hook( __FILE__, array( 'My_Plugin', 'install' ) );
    

    任何帮助表示赞赏< 3

0 个答案:

没有答案