File: /var/www/vfconf/wp-content/plugins/acme-demo-setup/includes/api.php
<?php
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
if ( ! class_exists( 'Acme_Demo_Setup_Template_Library_Api' ) ) {
/**
* @package Acme Themes
* @subpackage Acme Demo Setup Template Library Api
* @since 2.0.1
*
* Call like this
* SITEURL/wp-json/acmethemes-demo-api/v1/fetch_templates/
*/
class Acme_Demo_Setup_Template_Library_Api extends WP_Rest_Controller {
/**
* Rest route namespace.
*
* @var Acme_Demo_Setup_Template_Library_Api
*/
public $namespace = 'acmethemes-demo-api/';
/**
* Rest route version.
*
* @var Acme_Demo_Setup_Template_Library_Api
*/
public $version = 'v1';
/**
* Initialize the class
*/
public function run() {
add_action( 'rest_api_init', array( $this, 'register_routes' ) );
}
/**
* Register REST API route
*/
public function register_routes() {
$namespace = $this->namespace . $this->version;
register_rest_route(
$namespace,
'/fetch_templates',
array(
array(
'methods' => \WP_REST_Server::READABLE,
'callback' => array( $this, 'fetch_templates' ),
'args' => array(
'theme-slug' => array(
'type' => 'string',
'required' => true,
'description' => __( 'Theme Slug', 'acme-demo-setup' ),
),
),
'permission_callback' => '__return_true',
),
)
);
register_rest_route(
$namespace,
'/all-demos',
array(
array(
'methods' => \WP_REST_Server::READABLE,
'callback' => array( $this, 'get_all_templates' ),
'permission_callback' => '__return_true',
),
)
);
register_rest_route(
$namespace,
'/all-items',
array(
array(
'methods' => \WP_REST_Server::READABLE,
'callback' => array( $this, 'get_all_items' ),
'permission_callback' => '__return_true',
),
)
);
}
/**
* Function to fetch templates.
*
* @return array|bool|\WP_Error
*/
public function fetch_templates( \WP_REST_Request $request ) {
if ( ! $request->get_param( 'theme-slug' ) ) {
return false;
}
$theme_slug = $request->get_param( 'theme-slug' );
$templates = acme_demo_setup_get_templates_lists( $theme_slug );
return rest_ensure_response( $templates );
}
/**
* Function to get all templates.
*
* @return array
*/
public function get_all_templates( \WP_REST_Request $request ) {
$templates = acme_demo_setup_get_all_templates();
return rest_ensure_response( $templates );
}
/**
* Function to get all items.
*
* @return array
*/
public function get_all_items( \WP_REST_Request $request ) {
$all_items = acme_demo_setup_get_all_items();
return rest_ensure_response( $all_items );
}
/**
* Gets an instance of this object.
* Prevents duplicate instances which avoid artefacts and improves performance.
*
* @static
* @access public
* @since 1.0.1
* @return object
*/
public static function get_instance() {
// Store the instance locally to avoid private static replication
static $instance = null;
// Only run these methods if they haven't been ran previously
if ( null === $instance ) {
$instance = new self();
}
// Always return the instance
return $instance;
}
/**
* Throw error on object clone
*
* The whole idea of the singleton design pattern is that there is a single
* object therefore, we don't want the object to be cloned.
*
* @access public
* @since 1.0.0
* @return void
*/
public function __clone() {
// Cloning instances of the class is forbidden.
_doing_it_wrong( __FUNCTION__, esc_html__( 'Cheatin’ huh?', 'acme-demo-setup' ), '1.0.0' );
}
/**
* Disable unserializing of the class
*
* @access public
* @since 1.0.0
* @return void
*/
public function __wakeup() {
// Unserializing instances of the class is forbidden.
_doing_it_wrong( __FUNCTION__, esc_html__( 'Cheatin’ huh?', 'acme-demo-setup' ), '1.0.0' );
}
}
}
Acme_Demo_Setup_Template_Library_Api::get_instance()->run();