Last active
August 29, 2015 14:01
-
-
Save ajmorris/24f5c3d7ca8c5da89c5d to your computer and use it in GitHub Desktop.
function containing transients
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. | |
* | |
* @package Support_KB_Press | |
* @author Your Name <[email protected]> | |
* @license GPL-2.0+ | |
* @link http://example.com | |
* @copyright 2014 Your Name or Company Name | |
*/ | |
/** | |
* Plugin class. This class should ideally be used to work with the | |
* public-facing side of the WordPress site. | |
* | |
* If you're interested in introducing administrative or dashboard | |
* functionality, then refer to `class-plugin-name-admin.php` | |
* | |
* @TODO: Rename this class to a proper name for your plugin. | |
* | |
* @package Support_KB_Press | |
* @author Your Name <[email protected]> | |
*/ | |
class Support_KB_Press { | |
/** | |
* Plugin version, used for cache-busting of style and script file references. | |
* | |
* @since 1.0.0 | |
* | |
* @var string | |
*/ | |
const VERSION = '1.0.0'; | |
/** | |
* @TODO - Rename "plugin-name" to the name of your plugin | |
* | |
* Unique identifier for your plugin. | |
* | |
* | |
* The variable name is used as the text domain when internationalizing strings | |
* of text. Its value should match the Text Domain file header in the main | |
* plugin file. | |
* | |
* @since 1.0.0 | |
* | |
* @var string | |
*/ | |
protected $plugin_slug = 'plugin-name'; | |
/** | |
* Instance of this class. | |
* | |
* @since 1.0.0 | |
* | |
* @var object | |
*/ | |
protected static $instance = null; | |
/** | |
* Initialize the plugin by setting localization and loading public scripts | |
* and styles. | |
* | |
* @since 1.0.0 | |
*/ | |
private function __construct() { | |
// Load plugin text domain | |
add_action( 'init', array( $this, 'load_plugin_textdomain' ) ); | |
// Activate plugin when new blog is added | |
add_action( 'wpmu_new_blog', array( $this, 'activate_new_site' ) ); | |
// Load public-facing style sheet and JavaScript. | |
add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_styles' ) ); | |
add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_scripts' ) ); | |
/* Define custom functionality. | |
* Refer To http://codex.wordpress.org/Plugin_API#Hooks.2C_Actions_and_Filters | |
*/ | |
// add_action( '@TODO', array( $this, 'action_method_name' ) ); | |
// add_filter( '@TODO', array( $this, 'filter_method_name' ) ); | |
add_action( 'init', array( $this, 'skbp_register_cpts' ) ); | |
add_action( 'init', array( $this, 'skbp_register_taxonomies' ) ); | |
add_shortcode( 'getsat', array( $this, 'skbp_output_forum_posts_list' ) ); | |
} | |
/** | |
* Return the plugin slug. | |
* | |
* @since 1.0.0 | |
* | |
* @return Plugin slug variable. | |
*/ | |
public function get_plugin_slug() { | |
return $this->plugin_slug; | |
} | |
/** | |
* Return an instance of this class. | |
* | |
* @since 1.0.0 | |
* | |
* @return object A single instance of this class. | |
*/ | |
public static function get_instance() { | |
// If the single instance hasn't been set, set it now. | |
if ( null == self::$instance ) { | |
self::$instance = new self; | |
} | |
return self::$instance; | |
} | |
/** | |
* Fired when the plugin is activated. | |
* | |
* @since 1.0.0 | |
* | |
* @param boolean $network_wide True if WPMU superadmin uses | |
* "Network Activate" action, false if | |
* WPMU is disabled or plugin is | |
* activated on an individual blog. | |
*/ | |
public static function activate( $network_wide ) { | |
if ( function_exists( 'is_multisite' ) && is_multisite() ) { | |
if ( $network_wide ) { | |
// Get all blog ids | |
$blog_ids = self::get_blog_ids(); | |
foreach ( $blog_ids as $blog_id ) { | |
switch_to_blog( $blog_id ); | |
self::single_activate(); | |
} | |
restore_current_blog(); | |
} else { | |
self::single_activate(); | |
} | |
} else { | |
self::single_activate(); | |
} | |
} | |
/** | |
* Fired when the plugin is deactivated. | |
* | |
* @since 1.0.0 | |
* | |
* @param boolean $network_wide True if WPMU superadmin uses | |
* "Network Deactivate" action, false if | |
* WPMU is disabled or plugin is | |
* deactivated on an individual blog. | |
*/ | |
public static function deactivate( $network_wide ) { | |
if ( function_exists( 'is_multisite' ) && is_multisite() ) { | |
if ( $network_wide ) { | |
// Get all blog ids | |
$blog_ids = self::get_blog_ids(); | |
foreach ( $blog_ids as $blog_id ) { | |
switch_to_blog( $blog_id ); | |
self::single_deactivate(); | |
} | |
restore_current_blog(); | |
} else { | |
self::single_deactivate(); | |
} | |
} else { | |
self::single_deactivate(); | |
} | |
} | |
/** | |
* Fired when a new site is activated with a WPMU environment. | |
* | |
* @since 1.0.0 | |
* | |
* @param int $blog_id ID of the new blog. | |
*/ | |
public function activate_new_site( $blog_id ) { | |
if ( 1 !== did_action( 'wpmu_new_blog' ) ) { | |
return; | |
} | |
switch_to_blog( $blog_id ); | |
self::single_activate(); | |
restore_current_blog(); | |
} | |
/** | |
* Get all blog ids of blogs in the current network that are: | |
* - not archived | |
* - not spam | |
* - not deleted | |
* | |
* @since 1.0.0 | |
* | |
* @return array|false The blog ids, false if no matches. | |
*/ | |
private static function get_blog_ids() { | |
global $wpdb; | |
// get an array of blog ids | |
$sql = "SELECT blog_id FROM $wpdb->blogs | |
WHERE archived = '0' AND spam = '0' | |
AND deleted = '0'"; | |
return $wpdb->get_col( $sql ); | |
} | |
/** | |
* Fired for each blog when the plugin is activated. | |
* | |
* @since 1.0.0 | |
*/ | |
private static function single_activate() { | |
// @TODO: Define activation functionality here | |
} | |
/** | |
* Fired for each blog when the plugin is deactivated. | |
* | |
* @since 1.0.0 | |
*/ | |
private static function single_deactivate() { | |
// @TODO: Define deactivation functionality here | |
} | |
/** | |
* Load the plugin text domain for translation. | |
* | |
* @since 1.0.0 | |
*/ | |
public function load_plugin_textdomain() { | |
$domain = $this->plugin_slug; | |
$locale = apply_filters( 'plugin_locale', get_locale(), $domain ); | |
load_textdomain( $domain, trailingslashit( WP_LANG_DIR ) . $domain . '/' . $domain . '-' . $locale . '.mo' ); | |
load_plugin_textdomain( $domain, FALSE, basename( plugin_dir_path( dirname( __FILE__ ) ) ) . '/languages/' ); | |
} | |
/** | |
* Register and enqueue public-facing style sheet. | |
* | |
* @since 1.0.0 | |
*/ | |
public function enqueue_styles() { | |
wp_enqueue_style( $this->plugin_slug . '-plugin-styles', plugins_url( 'assets/css/public.css', __FILE__ ), array(), self::VERSION ); | |
} | |
/** | |
* Register and enqueues public-facing JavaScript files. | |
* | |
* @since 1.0.0 | |
*/ | |
public function enqueue_scripts() { | |
wp_enqueue_script( $this->plugin_slug . '-plugin-script', plugins_url( 'assets/js/public.js', __FILE__ ), array( 'jquery' ), self::VERSION ); | |
} | |
/** | |
* NOTE: Actions are points in the execution of a page or process | |
* lifecycle that WordPress fires. | |
* | |
* Actions: http://codex.wordpress.org/Plugin_API#Actions | |
* Reference: http://codex.wordpress.org/Plugin_API/Action_Reference | |
* | |
* @since 1.0.0 | |
*/ | |
public function action_method_name() { | |
// @TODO: Define your action hook callback here | |
} | |
/** | |
* NOTE: Filters are points of execution in which WordPress modifies data | |
* before saving it or sending it to the browser. | |
* | |
* Filters: http://codex.wordpress.org/Plugin_API#Filters | |
* Reference: http://codex.wordpress.org/Plugin_API/Filter_Reference | |
* | |
* @since 1.0.0 | |
*/ | |
public function filter_method_name() { | |
// @TODO: Define your filter hook callback here | |
} | |
/** | |
* NOTE: Lets register the Custom Post Type and custom taxonomy | |
* | |
* | |
* @since 1.0.0 | |
*/ | |
public function skbp_register_cpts() { | |
$labels = array( | |
'name' => _x( 'Support Articles', 'post type general name', 'your-plugin-textdomain' ), | |
'singular_name' => _x( 'Support Article', 'post type singular name', 'your-plugin-textdomain' ), | |
'menu_name' => _x( 'Support Articles', 'admin menu', 'your-plugin-textdomain' ), | |
'name_admin_bar' => _x( 'Support Article', 'add new on admin bar', 'your-plugin-textdomain' ), | |
'add_new' => _x( 'Add New', 'support article', 'your-plugin-textdomain' ), | |
'add_new_item' => __( 'Add New Support Article', 'your-plugin-textdomain' ), | |
'new_item' => __( 'New Support Article', 'your-plugin-textdomain' ), | |
'edit_item' => __( 'Edit Support Article', 'your-plugin-textdomain' ), | |
'view_item' => __( 'View Support Article', 'your-plugin-textdomain' ), | |
'all_items' => __( 'All Support Articles', 'your-plugin-textdomain' ), | |
'search_items' => __( 'Search Support Articles', 'your-plugin-textdomain' ), | |
'parent_item_colon' => __( 'Parent Support Articles:', 'your-plugin-textdomain' ), | |
'not_found' => __( 'No support articles found.', 'your-plugin-textdomain' ), | |
'not_found_in_trash' => __( 'No support articles found in Trash.', 'your-plugin-textdomain' ), | |
); | |
$args = array( | |
'labels' => $labels, | |
'public' => true, | |
'publicly_queryable' => true, | |
'show_ui' => true, | |
'show_in_menu' => true, | |
'query_var' => true, | |
'rewrite' => array( 'slug' => 'support-articles' ), | |
'capability_type' => 'post', | |
'has_archive' => true, | |
'hierarchical' => false, | |
'menu_position' => null, | |
'menu_icon' => 'dashicons-sos', | |
'supports' => array( 'title', 'editor', 'author', 'thumbnail', 'excerpt', 'comments' ) | |
); | |
register_post_type( 'support-articles', $args ); | |
} | |
/** | |
* NOTE: Lets register the Custom Post Type and custom taxonomy | |
* | |
* Register Taxonomies for Support Articles | |
* | |
* @since 1.0.0 | |
*/ | |
public function skbp_register_taxonomies() { | |
$support_tags_labels = array( | |
'name' => _x( 'Support Tags', 'taxonomy general name' ), | |
'singular_name' => _x( 'Support Tag', 'taxonomy singular name' ), | |
'search_items' => __( 'Search Support Tag' ), | |
'all_items' => __( 'All Support Tags' ), | |
'parent_item' => __( 'Parent Support Tag' ), | |
'parent_item_colon' => __( 'Parent Support Tag:' ), | |
'edit_item' => __( 'Edit Support Tag' ), | |
'update_item' => __( 'Update Support Tag' ), | |
'add_new_item' => __( 'Add New Support Tag' ), | |
'new_item_name' => __( 'New Support Tag Name' ), | |
'menu_name' => __( 'Support Tags' ), | |
); | |
$tags_args = array( | |
'hierarchical' => false, | |
'labels' => $support_tags_labels, | |
'show_ui' => true, | |
'show_admin_column' => true, | |
'update_count_callback' => '_update_post_term_count', | |
'query_var' => true, | |
'rewrite' => array( 'slug' => 'support-tags' ), | |
); | |
register_taxonomy( 'support-tags', array( 'support-articles' ), $category_args ); | |
$support_category_labels = array( | |
'name' => _x( 'Support Categories', 'categories general name' ), | |
'singular_name' => _x( 'Support Category', 'taxonomy singular name' ), | |
'search_items' => __( 'Search Support Category' ), | |
'all_items' => __( 'All Support Categories' ), | |
'parent_item' => __( 'Parent Support Category' ), | |
'parent_item_colon' => __( 'Parent Support Category:' ), | |
'edit_item' => __( 'Edit Support Category' ), | |
'update_item' => __( 'Update Support Category' ), | |
'add_new_item' => __( 'Add New Support Category' ), | |
'new_item_name' => __( 'New Support Category Name' ), | |
'menu_name' => __( 'Support Categories' ), | |
); | |
$category_args = array( | |
'hierarchical' => true, | |
'labels' => $support_category_labels, | |
'show_ui' => true, | |
'show_admin_column' => true, | |
'update_count_callback' => '_update_post_term_count', | |
'query_var' => true, | |
'rewrite' => array( 'slug' => 'support-categories' ), | |
); | |
register_taxonomy( 'support-categories', array( 'support-articles' ), $category_args ); | |
} | |
public function skbp_get_sat_posts() { | |
$get_sat_url = 'https://helpforum.covenanteyes.com/covenanteyes/topics.rss?sort=created_at'; | |
$get_sat = wp_remote_get( $get_sat_url ); | |
$body = wp_remote_retrieve_body( $get_sat ); | |
$items = 5; | |
$xml = simplexml_load_string( $body ); | |
echo "<h3>Recent Forum Threads</h3>"; | |
echo "<ul>"; | |
for ( $i=0; $i<$items; $i++ ) { | |
echo "<li><a href='" . $xml->channel->item[$i]->link . "'>" . $xml->channel->item[$i]->title . "</a></li>"; | |
} | |
echo "</ul>"; | |
} | |
/** | |
* Output HTML markup for forum post list. | |
* | |
* @since 1.0.0 | |
* | |
* @param integer $post_count Post count. | |
*/ | |
public function skbp_output_forum_posts_list( $post_count = 5 ) { | |
echo self::skbp_get_forum_posts_list( $post_count = 5 ); | |
} | |
/** | |
* Generate HTML markup for forum post list. | |
* | |
* @since 1.0.0 | |
* | |
* @param integer $post_count Post count. | |
* @return string HTML Markup. | |
*/ | |
private function skbp_get_forum_posts_list( $post_count = 5 ) { | |
$xml = simplexml_load_string( self::skbp_get_forum_posts_xml() ); | |
$output = ''; | |
$output .= '<h3>' . __( 'Recent Forum Threads', 'skbp' ) . '</h3>'; | |
$output .= '<ul>'; | |
for ( $i = 0; $i < absint( $post_count ); $i++ ) { | |
$output .= '<li>' . self::skbp_get_forum_post_link( $xml->channel->item[ $i ] ) . '</li>'; | |
} | |
$output .= '</ul>'; | |
return $output; | |
} | |
/** | |
* Retrieve recent forum post XML data. | |
* | |
* @since 1.0.0 | |
* | |
* @return string XML data. | |
*/ | |
private function skbp_get_forum_posts_xml() { | |
$forum_feed_xml = get_transient( 'skbp_get_forum_posts_xml' ); | |
if ( false === $forum_feed_xml ) { | |
$get_sat_posts = wp_remote_get( 'https://helpforum.covenanteyes.com/covenanteyes/topics.rss?sort=created_at' ); | |
$forum_feed_xml = wp_remote_retrieve_body( $get_sat_posts ); | |
set_transient( 'skbp_get_forum_posts_xml', $forum_feed_xml, 2 * DAY_IN_SECONDS ); | |
} | |
return maybe_unserialize( $forum_feed_xml ); | |
} | |
/** | |
* Generate HTML markup for a single forum post link. | |
* | |
* @since 1.0.0 | |
* | |
* @param object $item XML item object. | |
* @return string HTML Markup. | |
*/ | |
private function skbp_get_forum_post_link( $item = null ) { | |
return is_object( $item ) | |
? sprintf( | |
'<a href="%1$s">%2$s</a>', | |
$item->link, | |
$item->title | |
) | |
: ''; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment