使用WordPress插件

时间:2016-03-26 10:19:52

标签: php wordpress oop

我正在开发一个WordPress插件。我是PHP OOP的新手,BTW采用了一种先进的方法来实现跟随一个高级WordPress插件。而现在卡在某处。我可以回到程序化的PHP,但如果我从目前为止回来,事情将不会受到影响。

我理解我做了什么,但可能是我想念的东西,这就是我为什么要寻求你对我的代码非常直观的看法,我做错了什么。

具有自我实例化的主类

<?php
if ( ! class_exists( 'Xyz' ) ) :

final class Xyz {

    /**
     * Xyz version.
     * @var string
     */
    public $version = '1.0.0';

    /**
     * @var Xyz The single instance of the class
     */
    protected static $_instance = null;

    /**
     * Main Xyz Instance.
     *
     * Ensures only one instance of Xyz is loaded or can be loaded.
     * 
     * @static
     * @see XYZ()
     * @return Xyz - Main instance
     */
    public static function instance() {
        if ( is_null( self::$_instance ) ) {
            self::$_instance = new self();
        }
        return self::$_instance;
    }

    public function __construct() {
        $this->define_constants();
        $this->xyz_includes();
        $this->init();
    }

    /**
     * Define constant if not yet set.
     *
     * @param string        $name
     * @param string|bool   $value
     */
    private function xyz_define( $name, $value ) {
        if ( ! defined( $name ) ) {
            define( $name, $value );
        }
    }

    /**
     * Define necessary constants
     */
    private function define_constants() {
        $this->xyz_define( 'XYZ_PLUGIN_FILE', __FILE__ );
        $this->xyz_define( 'XYZ_PLUGIN_BASENAME', plugin_basename( __FILE__ ) );
    }

    /**
     * Include additional files
     */
    public function xyz_includes() {
        /** Classes **/
        include_once( 'includes/class-xyz-install.php' );

        /** Core Functions **/
        include_once( 'includes/xyz-core-functions.php' );

        //...and so on...
    }

    public function init() {
        register_activation_hook( __FILE__, array('XYZ_Install', 'install') );
        add_action( 'init', array( $this, 'xyz_load_textdomain' ), 1 );
    }

    /**
     * Make the plugin translation-ready.
     */
    public function xyz_load_textdomain() {

        load_plugin_textdomain(
            'xyz',
            false,
            dirname( plugin_basename( __FILE__ ) ) .'/languages/'
        );
    }
}

endif;

/**
 * Returns the main instance of Xyz to prevent the need to use globals.
 * @return XYZ
 */
function XYZ() {
    return Xyz::instance();
}

includes/class-xyz-install.php

<?php
class XYZ_Install {

    public static function init() {
        add_filter( 'plugin_action_links_'. XYZ_PLUGIN_BASENAME, array( __CLASS__, 'plugin_settings_link' ) );
    }

    public static function plugin_settings_link( $links ) {
      //$links = existing links + made up link
      return $links;
    }

    public function install() {
        delete_option( 'xyz_version' );
        add_option( 'xyz_version', XYZ()->version );

        xyz_register_cpt_xyz();
        flush_rewrite_rules( false );
    }

}

XYZ_Install::init();

当我开始开发插件时,自我实例化工作正常,我从其属性中获取所有值( var )。

我启用了register_activation_hook()和其他包含的程序编码。但是当我使用final类实现它们时,它们就停止了工作。

  1. 包含不起作用。如果我将它们放在程序函数something()中,只需在something();某处调用它,那么包含工作正常。
  2. 我不确定班上的register_activation_hook()是否正确。
  3. 我喜欢从错误中学习PHP OOP。非常感谢任何帮助。

    编辑20180107

    使用NS_Install修正了错误XYZ_Install

0 个答案:

没有答案