Skip to content

Instantly share code, notes, and snippets.

@maxxscho
Forked from thefuxia/plugin-class-demo.php
Last active October 18, 2023 14:28
Show Gist options
  • Select an option

  • Save maxxscho/3da55eecf34bcfe6e1bc to your computer and use it in GitHub Desktop.

Select an option

Save maxxscho/3da55eecf34bcfe6e1bc to your computer and use it in GitHub Desktop.

Revisions

  1. @toscho toscho created this gist Sep 29, 2012.
    122 changes: 122 additions & 0 deletions plugin-class-demo.php
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,122 @@
    <?php # -*- coding: utf-8 -*-
    /**
    * Plugin Name: Plugin Class Demo
    * Description: How I am using the base class in plugins.
    * Plugin URI:
    * Version: 2012.09.29
    * Author: Thomas Scholz
    * Author URI: http://toscho.de
    * License: GPL
    * Text Domain: plugin_unique_name
    * Domain Path: /languages
    */

    /*
    * I prefer the empty-constructor-approach showed here.
    *
    * Advantages:
    * - Unit tests can create new instances without activating any hooks
    * automatically. No Singleton.
    *
    * - No global variable needed.
    *
    * - Whoever wants to work with the plugin instance can just call
    * T5_Plugin_Class_Demo::get_instance().
    *
    * - Easy to deactivate.
    *
    * - Still real OOP: no working methods are static.
    *
    * Disadvantage:
    * - Maybe harder to read?
    *
    */

    add_action(
    'plugins_loaded',
    array ( T5_Plugin_Class_Demo::get_instance(), 'plugin_setup' )
    );

    class T5_Plugin_Class_Demo
    {
    /**
    * Plugin instance.
    *
    * @see get_instance()
    * @type object
    */
    protected static $instance = NULL;

    /**
    * URL to this plugin's directory.
    *
    * @type string
    */
    public $plugin_url = '';

    /**
    * Path to this plugin's directory.
    *
    * @type string
    */
    public $plugin_path = '';

    /**
    * Access this plugin’s working instance
    *
    * @wp-hook plugins_loaded
    * @since 2012.09.13
    * @return object of this class
    */
    public static function get_instance()
    {
    NULL === self::$instance and self::$instance = new self;

    return self::$instance;
    }

    /**
    * Used for regular plugin work.
    *
    * @wp-hook plugins_loaded
    * @since 2012.09.10
    * @return void
    */
    public function plugin_setup()
    {

    $this->plugin_url = plugins_url( '/', __FILE__ );
    $this->plugin_path = plugin_dir_path( __FILE__ );
    $this->load_language( 'plugin_unique_name' );

    // more stuff: register actions and filters
    }

    /**
    * Constructor. Intentionally left empty and public.
    *
    * @see plugin_setup()
    * @since 2012.09.12
    */
    public function __construct() {}

    /**
    * Loads translation file.
    *
    * Accessible to other classes to load different language files (admin and
    * front-end for example).
    *
    * @wp-hook init
    * @param string $domain
    * @since 2012.09.11
    * @return void
    */
    public function load_language( $domain )
    {
    load_plugin_textdomain(
    $domain,
    FALSE,
    $this->plugin_path . '/languages'
    );
    }
    }