Last active
February 12, 2025 20:00
-
-
Save carlalexander/9671804 to your computer and use it in GitHub Desktop.
WordPress and the single responsibility principle
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
namespace WPMemeShortcode; | |
/** | |
* The WordPress Meme Shortcode admin page. | |
* | |
* @author Carl Alexander | |
*/ | |
class AdminPage | |
{ | |
/** | |
* @var Options | |
*/ | |
private $options; | |
/** | |
* Register the admin page class with all the appropriate WordPress hooks. | |
* | |
* @param Options $options | |
*/ | |
public static function register(Options $options) | |
{ | |
$page = new self($options); | |
add_action('admin_init', array($page, 'configure')); | |
add_action('admin_menu', array($page, 'addAdminPage')); | |
} | |
/** | |
* Constructor. | |
* | |
* @param Options $options | |
*/ | |
public function __construct(Options $options) | |
{ | |
$this->options = $options; | |
} | |
/** | |
* Adds the admin page to the menu. | |
*/ | |
public function addAdminPage() | |
{ | |
add_options_page(__('WordPress Meme Shortcode', 'wp_meme_shortcode'), __('Meme Shortcode', 'wp_meme_shortcode'), 'install_plugins', 'wp_meme_shortcode', array($this, 'render')); | |
} | |
/** | |
* Configure the option page using the settings API. | |
*/ | |
public function configure() | |
{ | |
// Register settings | |
register_setting('wp_meme_shortcode', 'wp_meme_shortcode'); | |
// General Section | |
add_settings_section('wp_meme_shortcode_general', __('General', 'wp_meme_shortcode'), array($this, 'renderGeneralSection'), 'wp_meme_shortcode'); | |
add_settings_field('wp_meme_shortcode_size', __('Default Image Size', 'wp_meme_shortcode'), array($this, 'renderSizeField'), 'wp_meme_shortcode', 'wp_meme_shortcode_general'); | |
} | |
/** | |
* Renders the admin page using the Settings API. | |
*/ | |
public function render() | |
{ | |
?> | |
<div class="wrap" id="wp-meme-shortcode-admin"> | |
<h2><?php _e('WordPress Meme Shortcode', 'wp_meme_shortcode'); ?></h2> | |
<form action="options.php" method="POST"> | |
<?php settings_fields('wp_meme_shortcode'); ?> | |
<?php do_settings_sections('wp_meme_shortcode'); ?> | |
<?php submit_button(); ?> | |
</form> | |
</div> | |
<?php | |
} | |
/** | |
* Renders the general section. | |
*/ | |
public function renderGeneralSection() | |
{ | |
?> | |
<p><?php _e('Configure WordPress Meme Shortcode.', 'wp_meme_shortcode'); ?></p> | |
<?php | |
} | |
/** | |
* Renders the size field. | |
*/ | |
public function renderSizeField() | |
{ | |
?> | |
<input id="wp_meme_shortcode_size" name="wp_meme_shortcode[size]" type="number" value="<?php echo $this->options->get('size', '500'); ?>" /> | |
<?php | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/* | |
Plugin Name: WordPress Meme Shortcode | |
Description: Add some memes to your posts using a shortcode! | |
Author: Carl Alexander | |
Author URI: http://www.carlalexander.ca | |
License: GPL3 | |
*/ | |
// Load classes | |
require_once dirname(__FILE__) . '/AdminPage.php'; | |
require_once dirname(__FILE__) . '/Options.php'; | |
require_once dirname(__FILE__) . '/Plugin.php'; | |
require_once dirname(__FILE__) . '/Shortcode.php'; | |
\WPMemeShortcode\Plugin::load(); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
namespace WPMemeShortcode; | |
/** | |
* Manages WordPress Meme Shortcode options. | |
* | |
* @author Carl Alexander | |
*/ | |
class Options | |
{ | |
/** | |
* @var array | |
*/ | |
private $options; | |
/** | |
* Load the plugin options from WordPress. | |
* | |
* @return Options | |
*/ | |
public static function load() | |
{ | |
$options = get_option('wp_meme_shortcode', array()); | |
return new self($options); | |
} | |
/** | |
* Constructor. | |
* | |
* @param array $options | |
*/ | |
public function __construct(array $options = array()) | |
{ | |
$this->options = $options; | |
} | |
/** | |
* Gets the option for the given name. Returns the default value if the | |
* value does not exist. | |
* | |
* @param string $name | |
* @param mixed $default | |
* | |
* @return mixed | |
*/ | |
public function get($name, $default = null) | |
{ | |
if (!$this->has($name)) { | |
return $default; | |
} | |
return $this->options[$name]; | |
} | |
/** | |
* Checks if the option exists or not. | |
* | |
* @param string $name | |
* | |
* @return Boolean | |
*/ | |
public function has($name) | |
{ | |
return isset($this->options[$name]); | |
} | |
/** | |
* Sets an option. Overwrites the existing option if the name is already in use. | |
* | |
* @param string $name | |
* @param mixed $value | |
*/ | |
public function set($name, $value) | |
{ | |
$this->options[$name] = $value; | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
namespace WPMemeShortcode; | |
/** | |
* WordPress Meme Shortcode Plugin. | |
* | |
* @author Carl Alexander | |
*/ | |
class Plugin | |
{ | |
/** | |
* Loads the plugin into WordPress. | |
*/ | |
public static function load() | |
{ | |
$options = Options::load(); | |
AdminPage::register($options); | |
Shortcode::register($options); | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
namespace WPMemeShortcode; | |
/** | |
* WordPress Meme Shortcode handler. | |
* | |
* @author Carl Alexander | |
*/ | |
class Shortcode | |
{ | |
/** | |
* @var Options | |
*/ | |
private $options; | |
/** | |
* Register the shortcode class with all the appropriate WordPress hooks. | |
* | |
* @param Options $options | |
*/ | |
public static function register(Options $options) | |
{ | |
$shortcode = new self($options); | |
add_shortcode('meme', array($shortcode, 'handle')); | |
} | |
/** | |
* Constructor. | |
* | |
* @param Options $options | |
*/ | |
public function __construct(Options $options) | |
{ | |
$this->options = $options; | |
} | |
/** | |
* Handles the output of the shortcode. | |
* | |
* @param array $attributes | |
* @param string $content | |
*/ | |
public function handle(array $attributes, $content = null) | |
{ | |
// Do nothing if no ID is given or it is not numeric | |
if (!isset($attributes['id']) || !is_numeric($attributes['id'])) { | |
return $content; | |
} | |
// If no size is given or it is not a numeric value, get default. | |
if (!isset($attributes['size']) || !is_numeric($attributes['size'])) { | |
$attributes['size'] = $this->options->get('size', '500'); | |
} | |
return "<img src=\"http://cdn.memegenerator.net/instances/{$attributes['size']}x/{$attributes['id']}.jpg\" />"; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment