/00-class-meta-box.php Secret
Last active
May 24, 2017 15:25
Star
You must be signed in to star a gist
[WordPress] Rapid Prototyping: Prototype To Code, Part 1
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 | |
/** | |
* Registers the Meta Box with WordPress. | |
* | |
* @author Tom McFarlin | |
* @since 0.2.0 | |
*/ | |
/** | |
* Registers the Meta Box with WordPress. Defines the ID, title, display function, | |
* and the post type on which it will live. | |
* | |
* @author Tom McFarlin | |
* @since 0.2.0 | |
*/ | |
class Meta_Box { | |
/** | |
* A reference to the class that will display the contents in the meta box. | |
* | |
* @access private | |
* @var Meta_Box_Display | |
*/ | |
private $meta_box_display; | |
/** | |
* Instantiates the class by setting its property equal to a reference to its display. | |
*/ | |
public function __construct() { | |
$this->meta_box_display = new Meta_Box_Display(); | |
} | |
/** | |
* The function responsible for hooking into the WordPress API. | |
*/ | |
public function init() { | |
add_meta_box( | |
'three-recent-posts', | |
'Three Recent Posts', | |
array( $this->meta_box_display, 'display' ), | |
'post', | |
'side' | |
); | |
} | |
} |
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 | |
/** | |
* Defines the display for the meta box. | |
* | |
* @author Tom McFarlin | |
* @since 0.2.0 | |
*/ | |
/** | |
* Defines the display for the meta box that will render the content in the | |
* context of its meta box. | |
* | |
* @author Tom McFarlin | |
* @since 0.2.0 | |
*/ | |
class Meta_Box_Display { | |
/** | |
* A reference to the class that will display the contents in the meta box. | |
* | |
* @access private | |
* @var Post_Messenger | |
*/ | |
private $messenger; | |
/** | |
* Instantiates the object by setting a property equal to that of the class | |
* responsible for rendering the messages from the post query. | |
*/ | |
public function __construct() { | |
$this->messenger = new Post_Messenger( $this ); | |
} | |
/** | |
* If there are posts to display, renders them in the metabox. Otherwise, displays | |
* a note that there are no posts to display. | |
*/ | |
public function display( $message ) { | |
$this->messenger->get_message(); | |
} | |
} |
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 | |
/** | |
* Display content for the meta box when requested. | |
* | |
* @author Tom McFarlin | |
* @since 0.2.0 | |
*/ | |
/** | |
* Retrieves information from the class responsible for querying the database and | |
* renders it in the context of our meta box when called via the Meta Box Display. | |
* | |
* @author Tom McFarlin | |
* @since 0.2.0 | |
*/ | |
class Post_Messenger { | |
/** | |
* A reference to the query resonsible for retrieving post information from | |
* the database. | |
* | |
* @access private | |
* @var WP_Query | |
*/ | |
private $query; | |
/** | |
* A reference to the message that's displayed in the view of the | |
* meta box. | |
* | |
* @access private | |
*/ | |
private $message; | |
/** | |
* Instantiates the class by setting a reference to the query. | |
*/ | |
public function __construct() { | |
$this->query = new Post_Query(); | |
} | |
/** | |
* Retrieves the content to be displayed in the meta box. | |
*/ | |
public function get_message() { | |
$this->get_description(); | |
if ( $this->query->has_posts() ) { | |
$this->get_post_message(); | |
} else { | |
$this->get_no_posts_message(); | |
} | |
} | |
/** | |
* Displays the description of the content of the meta box. | |
* | |
* @access private | |
*/ | |
private function get_post_message() { | |
include_once 'post-list.php'; | |
} | |
/** | |
* Displays the description of the content of the meta box. | |
* | |
* @access private | |
*/ | |
private function get_description() { | |
include_once 'message-description.php'; | |
} | |
/** | |
* Displays a message of there are no recent posts. | |
* | |
* @access private | |
*/ | |
private function get_no_posts_message() { | |
include_once 'no-post-list.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 | |
/** | |
* Queries the database for three most recent posts. | |
* | |
* @author Tom McFarlin | |
* @since 0.2.0 | |
*/ | |
/** | |
* Queries the database for three most recent posts. Returns the query to the | |
* caller so that it can be interrogates for posts or not. | |
* | |
* @author Tom McFarlin | |
* @since 0.2.0 | |
*/ | |
class Post_Query { | |
/** | |
* A reference to the WP_Query this class wraps. | |
* | |
* @access private | |
* @var WP_Query | |
*/ | |
private $query; | |
/** | |
* Instantiates the class by preparing instance data and executing the | |
* query so the display can render the contents. | |
*/ | |
public function __construct() { | |
$this->query = null; | |
$this->get_posts(); | |
} | |
/** | |
* Executes the query for returning the post recent posts ordered by date. | |
* | |
* @access private | |
*/ | |
private function get_posts() { | |
$args = array( | |
'post_type' => 'post', | |
'post_status' => 'publish', | |
'orderby' => 'date', | |
'order' => 'desc', | |
); | |
$this->query = new WP_Query( $args ); | |
return $this->query; | |
} | |
/** | |
* A helper function to determine if the query has any posts. | |
*/ | |
public function has_posts() { | |
return ! $this->query->have_posts(); | |
} | |
/** | |
* A helper function for retrieving the next post in the list of | |
* posts | |
*/ | |
public function the_post() { | |
return $this->query->the_post(); | |
} | |
} |
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
<ol> | |
<?php while ( $this->query->has_posts() ) { ?> | |
<?php $this->query->the_post(); ?> | |
<li> | |
<a href="<?php get_the_permalink(); ?>" target="_blank"> | |
<?php echo get_the_title(); ?> | |
</a> | |
</li> | |
<?php } ?> | |
</ol> |
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
<p> | |
<span class="description"> | |
Displays up to the three most recent posts. | |
</span><!-- .description --> | |
</p> |
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
<p>There are no recent posts.</p> |
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 | |
/** | |
* Three Recent Posts | |
* | |
* @package TRP | |
* @author Tom McFarlin | |
* @copyright 2017 Tom McFarlin | |
* @license MIT | |
* | |
* @wordpress-plugin | |
* Plugin Name: Three Recent Posts | |
* Plugin URI: https://tommcfarlin.com/three-recent-posts/ | |
* Description: Displays the three mot recent posts in your post editor screen. | |
* Version: 0.2.0 | |
* Author: Tom McFarlin | |
* Author URI: https://tommcfarlin.com | |
* Text Domain: three-recent-posts | |
* License: GPL | |
* License URI: http://www.gnu.org/licenses/gpl-3.0.txt | |
*/ | |
include 'class-meta-box.php'; | |
include 'class-meta-box-display.php'; | |
include 'class-post-messenger.php'; | |
include 'class-post-query.php'; | |
add_action( 'add_meta_boxes', 'trp_start' ); | |
/** | |
* Starts the plugin. | |
*/ | |
function trp_start() { | |
$meta_box = new Meta_Box(); | |
$meta_box->init(); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment