*/ if ( ! defined( 'WPINC' ) ) { die; } class Ace_Testimonials_Slider_Admin { private $plugin_name; private $version; public function __construct( $plugin_name, $version ) { $this->plugin_name = $plugin_name; $this->version = $version; } /** * Enqueue admin styles. */ public function enqueue_styles() { $style_path = plugin_dir_path(__FILE__) . 'css/ace-testimonials-slider-admin.css'; $style_url = plugin_dir_url(__FILE__) . 'css/ace-testimonials-slider-admin.css'; $style_version = file_exists($style_path) ? filemtime($style_path) : $this->version; wp_enqueue_style($this->plugin_name . '-admin', $style_url, array(), $style_version, 'all'); } /** * Enqueue admin scripts. */ public function enqueue_scripts($hook_suffix) { wp_enqueue_style('wp-color-picker'); $script_path = plugin_dir_path(__FILE__) . 'js/ace-testimonials-slider-admin.js'; $script_url = plugin_dir_url(__FILE__) . 'js/ace-testimonials-slider-admin.js'; $version = file_exists($script_path) ? filemtime($script_path) : $this->version; wp_enqueue_script($this->plugin_name . '-admin', $script_url, array('jquery', 'wp-color-picker'), $version, true); } /** * Register testimonial post type. */ public function aceslider_register_post_type() { $labels = [ 'name' => 'Ace Testimonials', 'singular_name' => 'Ace Testimonial', 'menu_name' => 'Ace Testimonials', 'name_admin_bar' => 'Ace Testimonial', 'add_new' => 'Add New', 'add_new_item' => 'Add New Testimonial', 'new_item' => 'New Testimonial', 'edit_item' => 'Edit Testimonial', 'view_item' => 'View Testimonial', 'all_items' => 'All Testimonials', 'search_items' => 'Search Testimonials', 'not_found' => 'No testimonials found.', 'not_found_in_trash' => 'No testimonials found in Trash.' ]; $args = [ 'labels' => $labels, 'public' => true, 'show_ui' => true, 'show_in_menu' => true, 'menu_position' => 12, 'menu_icon' => 'dashicons-testimonial', 'supports' => ['title', 'editor', 'thumbnail'] ]; register_post_type('ace-testimonials', $args); } /** * Add submenu for settings. */ public function aceslider_menu() { add_submenu_page( 'edit.php?post_type=ace-testimonials', 'Settings', 'Settings', 'manage_options', 'ace-testimonials-slider', [$this, 'aceslider_settings_page'] ); } /** * Display settings page. */ public function aceslider_settings_page() { if ( isset( $_POST['aceslider_reset_settings'] ) ) { if ( ! isset( $_POST['aceslider_reset_nonce_field'] ) || ! wp_verify_nonce( sanitize_text_field( wp_unslash( $_POST['aceslider_reset_nonce_field'] ) ), 'aceslider_reset_nonce' ) ) { wp_die( esc_html__( 'Security check failed. Nonce verification failed.', 'ace-testimonials-slider' ) ); } if ( ! current_user_can( 'manage_options' ) ) { wp_die( esc_html__( 'You do not have permission to perform this action.', 'ace-testimonials-slider' ) ); } $default_settings = $this->aceslider_get_default_settings(); update_option( 'aceslider_settings', $default_settings ); add_settings_error( 'aceslider_messages', 'aceslider_message', esc_html__( 'Settings reset to default.', 'ace-testimonials-slider' ), 'updated' ); } require plugin_dir_path( __FILE__ ) . 'partials/ace-testimonials-slider-admin-display.php'; } private function aceslider_get_default_settings() { return [ 'image_shape' => 'circle', 'image_size' => 'thumbnail', 'custom_width' => '', 'custom_height' => '', 'char_limit' => 40, 'rating_position' => 'below_name', 'show_image' => 1, 'slider_bg_color' => '#ffffff', 'slider_heading_color' => '#000000', 'slider_description_color' => '#000000', 'showarrows' => 1, 'showdot' => 1, 'slidestoShow' => 2, 'slidesToScroll' => 2, 'autoplay' => 0, 'autoplaySpeed' => 2000, ]; } public function aceslider_register() { register_setting('ace_slider_settings', 'aceslider_settings', [ 'sanitize_callback' => [$this, 'sanitize_aceslider_settings'], ]); } public function sanitize_aceslider_settings($input) { if (!is_array($input)) { return []; } $sanitized = []; $sanitized['image_shape'] = sanitize_text_field($input['image_shape'] ?? ''); $sanitized['image_size'] = sanitize_text_field($input['image_size'] ?? ''); $sanitized['rating_position'] = sanitize_text_field($input['rating_position'] ?? ''); $sanitized['slider_bg_color'] = sanitize_text_field($input['slider_bg_color'] ?? ''); $sanitized['slider_heading_color'] = sanitize_text_field($input['slider_heading_color'] ?? ''); $sanitized['slider_description_color'] = sanitize_text_field($input['slider_description_color'] ?? ''); $sanitized['custom_width'] = isset($input['custom_width']) ? absint($input['custom_width']) : 0; $sanitized['custom_height'] = isset($input['custom_height']) ? absint($input['custom_height']) : 0; $sanitized['char_limit'] = isset($input['char_limit']) ? absint($input['char_limit']) : 100; $sanitized['slidestoShow'] = isset($input['slidestoShow']) ? absint($input['slidestoShow']) : 3; $sanitized['slidesToScroll'] = isset($input['slidesToScroll']) ? absint($input['slidesToScroll']) : 1; $sanitized['autoplaySpeed'] = isset($input['autoplaySpeed']) ? absint($input['autoplaySpeed']) : 2000; foreach (['show_image', 'autoplay', 'showdot', 'showarrows'] as $box) { $sanitized[$box] = !empty($input[$box]) ? 1 : 0; } return $sanitized; } /** * Add meta box. */ public function testimonial_meta_box() { add_meta_box( 'testimonial_meta', 'Testimonial Rating', [$this, 'testimonial_meta_box_callback'], 'ace-testimonials', 'normal', 'high' ); } public function testimonial_meta_box_callback($post) { wp_nonce_field('ace_testimonial_save_meta', 'ace_testimonial_nonce'); $rating = get_post_meta($post->ID, '_testimonial_rating', true); ?>