Astra_Ext_Advanced_Hooks_Loader
Description
Source
File: addons/advanced-hooks/classes/class-astra-ext-advanced-hooks-loader.php
class Astra_Ext_Advanced_Hooks_Loader { /** * Member Variable * * @var instance */ private static $instance; /** * Member Variable * * @var $_actions */ public static $_action = 'advanced-hooks'; // phpcs:ignore PSR2.Classes.PropertyDeclaration.Underscore /** * Initiator */ public static function get_instance() { if ( ! isset( self::$instance ) ) { self::$instance = new self(); } return self::$instance; } /** * Constructor */ public function __construct() { add_action( 'init', array( $this, 'advanced_hooks_post_type' ) ); add_action( 'admin_menu', array( $this, 'register_admin_menu' ), 100 ); add_action( 'astra_addon_activated', array( $this, 'astra_addon_activated_callback' ) ); add_filter( 'postbox_classes_ ' . ASTRA_ADVANCED_HOOKS_POST_TYPE . ' -advanced-hook-settings', array( $this, 'add_class_to_metabox' ) ); // Remove Meta box of astra settings. add_action( 'do_meta_boxes', array( $this, 'remove_astra_meta_box' ) ); add_filter( 'post_updated_messages', array( $this, 'custom_post_type_post_update_messages' ) ); if ( is_admin() ) { add_action( 'manage_' . ASTRA_ADVANCED_HOOKS_POST_TYPE . '_posts_custom_column', array( $this, 'column_content' ), 10, 2 ); // Filters. add_filter( 'manage_' . ASTRA_ADVANCED_HOOKS_POST_TYPE . '_posts_columns', array( $this, 'column_headings' ) ); } // Actions. add_action( 'admin_enqueue_scripts', array( $this, 'admin_enqueue_scripts' ) ); add_filter( 'fl_builder_post_types', array( $this, 'bb_builder_compatibility' ), 10, 1 ); // Divi support. add_filter( 'et_builder_post_types', array( $this, 'divi_builder_compatibility' ) ); add_filter( 'block_parser_class', function () { return 'Astra_WP_Block_Parser'; } ); } /** * Adds or removes list table column headings. * * @param array $columns Array of columns. * @return array */ public static function column_headings( $columns ) { unset( $columns['date'] ); $columns['advanced_hook_action'] = __( 'Action', 'astra-addon' ); $columns['advanced_hook_display_rules'] = __( 'Display Rules', 'astra-addon' ); $columns['date'] = __( 'Date', 'astra-addon' ); return apply_filters( 'astra_advanced_hooks_list_action_column_headings', $columns ); } /** * Adds the custom list table column content. * * @since 1.0 * @param array $column Name of column. * @param int $post_id Post id. * @return void */ public function column_content( $column, $post_id ) { $icon_style = 'font-size:17px;'; if ( 'advanced_hook_action' == $column ) { $layout = get_post_meta( $post_id, 'ast-advanced-hook-layout', true ); if ( 'hooks' === $layout ) { $action = get_post_meta( $post_id, 'ast-advanced-hook-action', true ); } else { $action = $layout; } echo apply_filters( 'astra_advanced_hooks_list_action_column', $action ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped } elseif ( 'advanced_hook_display_rules' == $column ) { $locations = get_post_meta( $post_id, 'ast-advanced-hook-location', true ); if ( ! empty( $locations ) ) { echo '<div class="ast-advanced-hook-location-wrap ast-advanced-hook-wrap">'; echo '<strong>' . esc_attr( __( 'Display', 'astra-addon' ) ) . ': </strong>'; $this->column_display_location_rules( $locations ); echo '</div>'; } $locations = get_post_meta( $post_id, 'ast-advanced-hook-exclusion', true ); if ( ! empty( $locations ) ) { echo '<div class="ast-advanced-hook-exclusion-wrap ast-advanced-hook-wrap">'; echo '<strong>' . esc_attr( __( 'Exclusion', 'astra-addon' ) ) . ': </strong>'; $this->column_display_location_rules( $locations ); echo '</div>'; } $users = get_post_meta( $post_id, 'ast-advanced-hook-users', true ); if ( isset( $users ) && is_array( $users ) ) { $user_label = array(); foreach ( $users as $user ) { $user_label[] = Astra_Target_Rules_Fields::get_user_by_key( $user ); } echo '<div class="ast-advanced-hook-users-wrap ast-advanced-hook-wrap">'; echo '<strong>' . esc_attr( __( 'Users', 'astra-addon' ) ) . ': </strong>'; echo esc_html( join( ', ', $user_label ) ); echo '</div>'; } $display_devices = get_post_meta( $post_id, 'ast-advanced-display-device', true ); if ( is_array( $display_devices ) ) { echo '<div class="ast-advanced-hook-display-devices-wrap ast-advanced-hook-wrap">'; echo '<strong>' . esc_attr( __( 'Devices', 'astra-addon' ) ) . ': </strong>'; foreach ( $display_devices as $display_device ) { switch ( $display_device ) { case 'desktop': echo '<span style=' . esc_attr( $icon_style ) . ' class="dashicons dashicons-desktop"></span>'; break; case 'tablet': echo '<span style=' . esc_attr( $icon_style ) . ' class="dashicons dashicons-tablet"></span>'; break; case 'mobile': echo '<span style=' . esc_attr( $icon_style ) . ' class="dashicons dashicons-smartphone"></span>'; break; } } echo '</div>'; } $time_duration = get_post_meta( $post_id, 'ast-advanced-time-duration', true ); if ( isset( $time_duration ) && is_array( $time_duration ) && isset( $time_duration['enabled'] ) ) { echo '<div class="ast-advanced-hook-time-duration-wrap ast-advanced-hook-wrap">'; echo '<strong>' . esc_attr( __( 'Time Duration Eligible', 'astra-addon' ) ) . ': </strong>'; if ( ! Astra_Ext_Advanced_Hooks_Markup::get_time_duration_eligibility( $post_id ) ) { echo '<span style=' . esc_attr( $icon_style ) . ' class="dashicons dashicons-no"></span>'; } else { echo '<span style=' . esc_attr( $icon_style ) . ' class="dashicons dashicons-yes-alt"></span>'; } echo '</div>'; } } } /** * Get Markup of Location rules for Display rule column. * * @param array $locations Array of locations. * @return void */ public function column_display_location_rules( $locations ) { $location_label = array(); $index = array_search( 'specifics', $locations['rule'] ); if ( false !== $index && ! empty( $index ) ) { unset( $locations['rule'][ $index ] ); } if ( isset( $locations['rule'] ) && is_array( $locations['rule'] ) ) { foreach ( $locations['rule'] as $location ) { $location_label[] = Astra_Target_Rules_Fields::get_location_by_key( $location ); } } if ( isset( $locations['specific'] ) && is_array( $locations['specific'] ) ) { foreach ( $locations['specific'] as $location ) { $location_label[] = Astra_Target_Rules_Fields::get_location_by_key( $location ); } } echo esc_html( join( ', ', $location_label ) ); } /** * Custom post type rewrite rules. */ public function astra_addon_activated_callback() { $this->advanced_hooks_post_type(); flush_rewrite_rules(); } /** * Add Custom Class to setting meta box * * @param array $classes Array of meta box classes. * @return array $classes updated body classes. */ public function add_class_to_metabox( $classes ) { $classes[] = 'advanced-hook-meta-box-wrap'; return $classes; } /** * Remove astra setting meta box */ public function remove_astra_meta_box() { remove_meta_box( 'astra_settings_meta_box', ASTRA_ADVANCED_HOOKS_POST_TYPE, 'side' ); } /** * Create Astra Advanced Hooks custom post type */ public function advanced_hooks_post_type() { $labels = array( 'name' => esc_html_x( 'Custom Layouts', 'advanced-hooks general name', 'astra-addon' ), 'singular_name' => esc_html_x( 'Custom Layout', 'advanced-hooks singular name', 'astra-addon' ), 'search_items' => esc_html__( 'Search Custom Layouts', 'astra-addon' ), 'all_items' => esc_html__( 'All Custom Layouts', 'astra-addon' ), 'edit_item' => esc_html__( 'Edit Custom Layout', 'astra-addon' ), 'view_item' => esc_html__( 'View Custom Layout', 'astra-addon' ), 'add_new' => esc_html__( 'Add New', 'astra-addon' ), 'update_item' => esc_html__( 'Update Custom Layout', 'astra-addon' ), 'add_new_item' => esc_html__( 'Add New', 'astra-addon' ), 'new_item_name' => esc_html__( 'New Custom Layout Name', 'astra-addon' ), ); $rest_support = true; // Rest support false if it is a old post with post meta code_editor set. if ( isset( $_GET['code_editor'] ) || ( isset( $_GET['post'] ) && 'code_editor' === get_post_meta( $_GET['post'], 'editor_type', true ) ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended $rest_support = false; } // Rest support true if it is a WordPress editor. if ( isset( $_GET['wordpress_editor'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended $rest_support = true; } $args = array( 'labels' => $labels, 'show_in_menu' => false, 'public' => true, 'show_ui' => true, 'query_var' => true, 'can_export' => true, 'show_in_admin_bar' => true, 'exclude_from_search' => true, 'show_in_rest' => $rest_support, 'supports' => apply_filters( 'astra_advanced_hooks_supports', array( 'title', 'editor', 'elementor' ) ), 'rewrite' => array( 'slug' => apply_filters( 'astra_advanced_hooks_rewrite_slug', 'astra-advanced-hook' ) ), ); register_post_type( ASTRA_ADVANCED_HOOKS_POST_TYPE, apply_filters( 'astra_advanced_hooks_post_type_args', $args ) ); } /** * Register the admin menu for Custom Layouts * * @since 1.2.1 * Moved the menu under Appearance -> Custom Layouts */ public function register_admin_menu() { $custom_layouts_capability = apply_filters( 'astra_custom_layouts_capability', 'edit_theme_options' ); add_submenu_page( 'themes.php', __( 'Custom Layouts', 'astra-addon' ), __( 'Custom Layouts', 'astra-addon' ), $custom_layouts_capability, 'edit.php?post_type=' . ASTRA_ADVANCED_HOOKS_POST_TYPE ); } /** * Enqueues scripts and styles for the theme layout * post type on the WordPress admin edit post screen. * * @since 1.0.0 * @return void */ public function admin_enqueue_scripts() { global $pagenow; global $post; $screen = get_current_screen(); if ( ( 'post-new.php' == $pagenow || 'post.php' == $pagenow ) && ASTRA_ADVANCED_HOOKS_POST_TYPE == $screen->post_type ) { // Styles. wp_enqueue_media(); wp_enqueue_script( 'advanced-hook-datetimepicker-script', ASTRA_EXT_ADVANCED_HOOKS_URL . 'assets/js/minified/jquery-ui-timepicker-addon.min.js', array( 'jquery-ui-datepicker', 'jquery-ui-slider' ), ASTRA_EXT_VER, true ); wp_enqueue_style( 'advanced-hook-datetimepicker-style', ASTRA_EXT_ADVANCED_HOOKS_URL . 'assets/css/minified/jquery-ui-timepicker-addon.min.css', null, ASTRA_EXT_VER ); // Scripts. if ( SCRIPT_DEBUG ) { wp_enqueue_style( 'advanced-hook-admin-edit', ASTRA_EXT_ADVANCED_HOOKS_URL . 'assets/css/unminified/astra-advanced-hooks-admin-edit.css', null, ASTRA_EXT_VER ); wp_enqueue_script( 'advanced-hook-admin-edit', ASTRA_EXT_ADVANCED_HOOKS_URL . 'assets/js/unminified/advanced-hooks.js', array( 'jquery', 'jquery-ui-tooltip' ), ASTRA_EXT_VER, false ); } else { wp_enqueue_style( 'advanced-hook-admin-edit', ASTRA_EXT_ADVANCED_HOOKS_URL . 'assets/css/minified/astra-advanced-hooks-admin-edit.min.css', null, ASTRA_EXT_VER ); wp_enqueue_script( 'advanced-hook-admin-edit', ASTRA_EXT_ADVANCED_HOOKS_URL . 'assets/js/minified/advanced-hooks.min.js', array( 'jquery', 'jquery-ui-tooltip' ), ASTRA_EXT_VER, false ); } } } /** * Add Update messages for any custom post type * * @param array $messages Array of default messages. */ public function custom_post_type_post_update_messages( $messages ) { $custom_post_type = get_post_type( get_the_ID() ); if ( ASTRA_ADVANCED_HOOKS_POST_TYPE == $custom_post_type ) { $obj = get_post_type_object( $custom_post_type ); $singular_name = $obj->labels->singular_name; $messages[ $custom_post_type ] = array( 0 => '', // Unused. Messages start at index 1. /* translators: %s: singular custom post type name */ 1 => sprintf( __( '%s updated.', 'astra-addon' ), $singular_name ), /* translators: %s: singular custom post type name */ 2 => sprintf( __( 'Custom %s updated.', 'astra-addon' ), $singular_name ), /* translators: %s: singular custom post type name */ 3 => sprintf( __( 'Custom %s deleted.', 'astra-addon' ), $singular_name ), /* translators: %s: singular custom post type name */ 4 => sprintf( __( '%s updated.', 'astra-addon' ), $singular_name ), /* translators: %1$s: singular custom post type name ,%2$s: date and time of the revision */ 5 => isset( $_GET['revision'] ) ? sprintf( __( '%1$s restored to revision from %2$s', 'astra-addon' ), $singular_name, wp_post_revision_title( (int) $_GET['revision'], false ) ) : false, // phpcs:ignore WordPress.Security.NonceVerification.Recommended /* translators: %s: singular custom post type name */ 6 => sprintf( __( '%s published.', 'astra-addon' ), $singular_name ), /* translators: %s: singular custom post type name */ 7 => sprintf( __( '%s saved.', 'astra-addon' ), $singular_name ), /* translators: %s: singular custom post type name */ 8 => sprintf( __( '%s submitted.', 'astra-addon' ), $singular_name ), /* translators: %s: singular custom post type name */ 9 => sprintf( __( '%s scheduled for.', 'astra-addon' ), $singular_name ), /* translators: %s: singular custom post type name */ 10 => sprintf( __( '%s draft updated.', 'astra-addon' ), $singular_name ), ); } return $messages; } /** * Add page builder support to Advanced hook. * * @param array $value Array of post types. */ public function bb_builder_compatibility( $value ) { $value[] = ASTRA_ADVANCED_HOOKS_POST_TYPE; return $value; } /** * Add Divi page builder support to Advanced hook post type. * * @param array $post_types Array of post types. * @return array $post_types Modified array of post types. */ public function divi_builder_compatibility( $post_types ) { $post_types[] = ASTRA_ADVANCED_HOOKS_POST_TYPE; return $post_types; } }
Expand full source code Collapse full source code View on Trac
Methods
- __construct — Constructor
- add_class_to_metabox — Add Custom Class to setting meta box
- admin_enqueue_scripts — Enqueues scripts and styles for the theme layout post type on the WordPress admin edit post screen.
- admin_print_tabs — Print admin tabs.
- admin_query_filter_types — Filter custom layouts in admin query.
- advanced_hooks_post_type — Create Astra Advanced Hooks custom post type
- ast_advanced_admin_top_header — HTML Template for custom layout header preview.
- ast_advanced_hook_display_toggle — Ajax request to toggle the display advanced hook.
- ast_advanced_layout_quick_preview — Quick View popup Ajax request to render dynamic content.
- astra_addon_activated_callback — Custom post type rewrite rules.
- bb_builder_compatibility — Add page builder support to Advanced hook.
- column_content — Adds the custom list table column content.
- column_display_location_rules — Get Markup of Location rules for Display rule column.
- column_headings — Adds or removes list table column headings.
- custom_post_type_post_update_messages — Add Update messages for any custom post type
- divi_builder_compatibility — Add Divi page builder support to Advanced hook post type.
- get_active_tab — Get default/active tab for custom layout admin tables.
- get_content_type — Get Post/Page Content types.
- get_device_type — Get device types.
- get_instance — Initiator
- get_layout_details — Get Custom Layout details to send to the AJAX endpoint for quick-preview.
- get_layout_type — Get all layout types.
- get_random_preview_post — Get random preview post.
- get_specific_rule — Get saved specific post/page rules values.
- layout_preview_template — HTML Template for custom layout preview.
- load_react_script — Enqueue custom Layout script.
- register_admin_menu — Register the admin menu for Custom Layouts
- register_meta_settings — Register Post Meta options for react based fields.
- register_react_script — Register Script for Custom Layout.
- remove_astra_meta_box — Remove astra setting meta box