options = get_option('vh_flickr_mosaic_options', [ 'api_url' => '', 'position' => 'footer', 'rows' => 2, 'photo_size' => 150, 'animation_speed' => 5, 'enabled' => true, ]); add_action('admin_menu', [$this, 'add_admin_menu']); add_action('admin_init', [$this, 'settings_init']); add_action('wp_enqueue_scripts', [$this, 'enqueue_scripts']); add_action('wp_footer', [$this, 'render_mosaic']); add_shortcode('flickr_mosaic', [$this, 'shortcode_mosaic']); } public function add_admin_menu() { add_options_page( 'VH Flickr Mosaic', 'VH Flickr Mosaic', 'manage_options', 'vh-flickr-mosaic', [$this, 'options_page'] ); } public function settings_init() { register_setting('vh_flickr_mosaic', 'vh_flickr_mosaic_options'); add_settings_section( 'vh_flickr_mosaic_section', __('Настройки мозаики', 'vh-flickr-mosaic'), null, 'vh-flickr-mosaic' ); add_settings_field( 'api_url', __('API URL', 'vh-flickr-mosaic'), [$this, 'api_url_render'], 'vh-flickr-mosaic', 'vh_flickr_mosaic_section' ); add_settings_field( 'enabled', __('Включить', 'vh-flickr-mosaic'), [$this, 'enabled_render'], 'vh-flickr-mosaic', 'vh_flickr_mosaic_section' ); add_settings_field( 'position', __('Позиция', 'vh-flickr-mosaic'), [$this, 'position_render'], 'vh-flickr-mosaic', 'vh_flickr_mosaic_section' ); add_settings_field( 'rows', __('Количество рядов', 'vh-flickr-mosaic'), [$this, 'rows_render'], 'vh-flickr-mosaic', 'vh_flickr_mosaic_section' ); add_settings_field( 'photo_size', __('Размер фото (px)', 'vh-flickr-mosaic'), [$this, 'photo_size_render'], 'vh-flickr-mosaic', 'vh_flickr_mosaic_section' ); add_settings_field( 'animation_speed', __('Скорость анимации (сек)', 'vh-flickr-mosaic'), [$this, 'animation_speed_render'], 'vh-flickr-mosaic', 'vh_flickr_mosaic_section' ); } public function api_url_render() { ?> ' class='regular-text' placeholder='https://your-site.com/vh/widget_api.php?action=get_photos'>

' min='1' max='5' style='width: 60px;'> ' min='80' max='300' style='width: 80px;'> ' min='2' max='15' step='0.5' style='width: 80px;'>


[flickr_mosaic]

[flickr_mosaic rows="3" size="120" speed="4"]

options['enabled']) || empty($this->options['api_url'])) { return; } wp_enqueue_style( 'vh-flickr-mosaic', plugin_dir_url(__FILE__) . 'assets/css/mosaic.css', [], '1.0.0' ); wp_enqueue_script( 'vh-flickr-mosaic', plugin_dir_url(__FILE__) . 'assets/js/mosaic.js', [], '1.0.0', true ); wp_localize_script('vh-flickr-mosaic', 'vhMosaicConfig', [ 'apiUrl' => $this->options['api_url'], 'rows' => intval($this->options['rows'] ?? 2), 'photoSize' => intval($this->options['photo_size'] ?? 150), 'animationSpeed' => floatval($this->options['animation_speed'] ?? 5), ]); } public function render_mosaic() { if (empty($this->options['enabled']) || empty($this->options['api_url'])) { return; } if (($this->options['position'] ?? 'footer') !== 'footer') { return; } echo $this->get_mosaic_html(); } public function shortcode_mosaic($atts) { if (empty($this->options['api_url'])) { return ''; } $atts = shortcode_atts([ 'rows' => $this->options['rows'] ?? 2, 'size' => $this->options['photo_size'] ?? 150, 'speed' => $this->options['animation_speed'] ?? 5, ], $atts); return $this->get_mosaic_html($atts); } private function get_mosaic_html($atts = []) { $rows = intval($atts['rows'] ?? $this->options['rows'] ?? 2); $size = intval($atts['size'] ?? $this->options['photo_size'] ?? 150); $speed = floatval($atts['speed'] ?? $this->options['animation_speed'] ?? 5); return sprintf( '
', $rows, $size, $speed ); } } // Initialize VH_Flickr_Mosaic::get_instance();