*/ class Acme_Coming_Soon_Patterns { /** * Gets an instance of this object. * Prevents duplicate instances which avoid artefacts and improves performance. * * @static * @access public * @return object * @since 1.0.0 */ 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; } /** * Initialize the class and set up actions. * * @access public * @return void */ public function run() { add_action( 'admin_init', array( $this, 'register_block_pattern_category' ) ); add_action( 'admin_init', array( $this, 'register_patterns' ) ); } /** * Register pattern category. * * @access public * @return void */ public function register_block_pattern_category() { register_block_pattern_category( 'pwp-coming-soon-and-maintenance', array( 'label' => esc_html__( 'Coming Soon and Maintenance', 'acme-coming-soon' ), ) ); } /** * Get patterns data. * * @access public * @return void */ public function register_patterns() { $pattern_api_url = ACME_COMING_SOON_URL . 'includes/json/patterns.json'; $response = wp_remote_get( $pattern_api_url ); if ( ! is_wp_error( $response ) ) { $patterns = json_decode( wp_remote_retrieve_body( $response ), true ); if ( $patterns ) { foreach ( $patterns as $pattern ) { $this->register_block_pattern( $pattern ); } } } } /** * Register an individual block pattern * * @since 1.0.0 * @access private * @param array $pattern Single block pattern. * @return void */ private function register_block_pattern( $pattern ) { register_block_pattern( sanitize_title( 'pwp-' . $pattern['slug'] ), array( 'title' => $pattern['title']['rendered'], 'content' => $pattern['pattern_content'], 'categories' => array( 'pwp-coming-soon-and-maintenance' ), ) ); } } if ( ! function_exists( 'acme_coming_soon_patterns' ) ) { /** * Return instance of Acme_Coming_Soon_Patterns class * * @since 1.0.0 * * @return Acme_Coming_Soon_Patterns */ function acme_coming_soon_patterns() { return Acme_Coming_Soon_Patterns::get_instance(); } } acme_coming_soon_patterns()->run();