added scroll to bottom template

This commit is contained in:
southseact-3d
2026-02-16 13:42:05 +00:00
parent 9a325df739
commit c2e5980a8b
8 changed files with 661 additions and 0 deletions

View File

@@ -0,0 +1,146 @@
<?php
/**
* Plugin Name: Scroll to Top
* Description: A customizable scroll-to-top button that appears when visitors scroll down the page.
* Version: 1.0.1
* Author: WordPress
* Text Domain: scroll-to-top
* License: GPL v2 or later
*/
defined('ABSPATH') || exit;
class Scroll_To_Top {
private static $instance = null;
public static $plugin_dir;
public static $plugin_url;
public static function get_instance() {
if (null === self::$instance) {
self::$instance = new self();
}
return self::$instance;
}
public function __construct() {
self::$plugin_dir = plugin_dir_path(__FILE__);
self::$plugin_url = plugin_dir_url(__FILE__);
add_action('admin_menu', array($this, 'add_admin_menu'));
add_action('admin_init', array($this, 'register_settings'));
add_action('wp_enqueue_scripts', array($this, 'enqueue_frontend_assets'));
add_action('admin_enqueue_scripts', array($this, 'enqueue_admin_assets'));
}
public function add_admin_menu() {
add_options_page(
'Scroll to Top Settings',
'Scroll to Top',
'manage_options',
'scroll-to-top-settings',
array($this, 'render_settings_page')
);
}
public function register_settings() {
register_setting('scroll_to_top_options', 'scroll_to_top_style', array(
'default' => 'circle',
'sanitize_callback' => 'sanitize_text_field'
));
register_setting('scroll_to_top_options', 'scroll_to_top_bg_color', array(
'default' => '#333333',
'sanitize_callback' => 'sanitize_hex_color'
));
register_setting('scroll_to_top_options', 'scroll_to_top_text_color', array(
'default' => '#ffffff',
'sanitize_callback' => 'sanitize_hex_color'
));
register_setting('scroll_to_top_options', 'scroll_to_top_size', array(
'default' => 'medium',
'sanitize_callback' => 'sanitize_text_field'
));
register_setting('scroll_to_top_options', 'scroll_to_top_position', array(
'default' => 'bottom-right',
'sanitize_callback' => 'sanitize_text_field'
));
register_setting('scroll_to_top_options', 'scroll_to_top_show_mobile', array(
'default' => '1',
'sanitize_callback' => 'rest_sanitize_boolean'
));
}
public function render_settings_page() {
if (!current_user_can('manage_options')) {
return;
}
include self::$plugin_dir . 'admin/settings-page.php';
}
public function enqueue_frontend_assets() {
$settings = $this->get_settings();
wp_enqueue_style(
'scroll-to-top-styles',
self::$plugin_url . 'assets/frontend.css',
array(),
'1.0.0'
);
wp_enqueue_script(
'scroll-to-top-script',
self::$plugin_url . 'assets/frontend.js',
array(),
'1.0.0',
true
);
wp_localize_script('scroll-to-top-script', 'scrollToTopSettings', array(
'style' => $settings['style'],
'bgColor' => $settings['bg_color'],
'textColor' => $settings['text_color'],
'size' => $settings['size'],
'position' => $settings['position'],
'showMobile' => $settings['show_mobile'],
));
}
public function enqueue_admin_assets($hook) {
if ('settings_page_scroll-to-top-settings' !== $hook) {
return;
}
wp_enqueue_style(
'scroll-to-top-admin-styles',
self::$plugin_url . 'assets/admin.css',
array(),
'1.0.0'
);
wp_enqueue_script(
'scroll-to-top-admin-script',
self::$plugin_url . 'assets/admin.js',
array(),
'1.0.0',
true
);
}
private function get_settings() {
return array(
'style' => get_option('scroll_to_top_style', 'circle'),
'bg_color' => get_option('scroll_to_top_bg_color', '#333333'),
'text_color' => get_option('scroll_to_top_text_color', '#ffffff'),
'size' => get_option('scroll_to_top_size', 'medium'),
'position' => get_option('scroll_to_top_position', 'bottom-right'),
'show_mobile' => get_option('scroll_to_top_show_mobile', '1'),
);
}
}
Scroll_To_Top::get_instance();