You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Banner按钮结合PHP与Ajax切换WordPress插件CSS样式

问题描述

我在用Ajax时遇到了麻烦,所以打算只用JavaScript实现功能。我想在插件的全局Banner里加个切换按钮,实现两个已创建的CSS文件之间的页面样式切换。目前我已经在另一个PHP文件里做了选择样式并提交的表单,能实现插件全局样式更改,现在想通过POST请求获取选项来完成Banner按钮的切换功能。

现有代码

样式选择表单(PHP)

/**
 * 用于管理设置内容显示的类
 */
class WoosterPartnerSettings
{
    /**
     * 许可证有效时,挂钩显示“设置”菜单内容
     */
    public function __construct()
    {
        if (get_option('partner_license') && get_option('partner_license') != '') {
            add_action('tab_content_settings', array($this, 'wooster_partner_settings'));
            add_action('admin_init', array($this, 'display_style'));
            add_action('admin_enqueue_scripts', array($this, 'enqueue_style'));
        }
    }

    /**
     * 显示用于选择样式表的表单
     *
     * @return void
     */
    public function wooster_partner_settings()
    {
?>
        <div class="wrap">
            <h1><?php echo __('Wooster 设置', 'wooster-partner'); ?></h1>
            <hr class="line">

            <form method="post" action="options.php">
                <?php settings_fields('wooster-settings-group'); ?>
                <?php do_settings_sections('wooster-settings-group'); ?>

                <p class="parag"><?php echo __('伙伴插件提供两种显示样式:', 'wooster-partner'); ?></p>

                <label for="style_wordpress">
                    <input type="radio" id="style_wordpress" name="wooster_style" value="compagnon-wp.css" <?php checked(get_option('wooster_style'), 'compagnon-wp.css'); ?>>
                    <?php echo __('WordPress 样式', 'wooster-partner'); ?>
                </label>

                <label for="style_wooster">
                    <input type="radio" id="style_wooster" name="wooster_style" value="compagnon-wooster.css" <?php checked(get_option('wooster_style'), 'compagnon-wooster.css'); ?>>
                    <?php echo __('Wooster 样式', 'wooster-partner'); ?>
                </label><br>

                <input type="submit" class="wooster-button" value="<?php echo __('保存修改', 'wooster-partner') ?>">
            </form>
        </div>
<?php
    }


    /**
     * 注册Wooster插件样式的设置项
     *
     * @return void
     */
    public function display_style()
    {
        register_setting('wooster-settings-group', 'wooster_style');
    }

    /**
     * 为Wooster插件设置页面加载选中的样式表
     *
     * @return void
     */
    public function enqueue_style()
    {
        if (is_admin()) {
            if (isset($_GET['page']) && strpos($_GET['page'], 'wooster') === 0) {
                $selected_style = get_option('wooster_style', 'compagnon-wp.css'); // 默认样式
                wp_enqueue_style('wooster-custom-style', plugins_url('wooster-partner/assets/css/' . $selected_style));
            }
        }
    }
}
new WoosterPartnerSettings();

全局Banner代码(PHP)

if (!class_exists('WoosterBanner')) {
    class WoosterBanner
    {
        public function __construct()
        {
            if (isset($_GET['page']) && in_array($_GET['page'], ['wooster','wooster-followup','wooster-licences','wooster-compagnon','wooster-customers','wooster-partner','wooster-settings','wooster-setup']) && is_admin()) {
                add_action('admin_enqueue_scripts', array($this, 'enqueue_styles'));
                add_action('in_admin_header', array($this, 'wooster_header_section'));
                add_action('wp_ajax_switch_css', array($this, 'switch_css')); // 用户登录时的请求处理
            }
        }

        public function wooster_header_section() {
            ?>
            <div id="top-bar-banner">
                <div class="wooster-banner">
                    <div class="logo">
                        <img src="<?php echo plugins_url('assets/img/logo.avif', __DIR__); ?>" alt="Logo">
                    </div>
                    <div class="actions">
                        <form method="post" action="options.php" id="form">
                            <?php settings_fields('wooster-settings-group'); ?>
                            <button type="button" id="wooster-exchange-button" class="button">
                                <i class="fas fa-exchange-alt"></i>
                            </button>
                        </form>
                        <a href="#" class="button"><i class="fas fa-question-circle"></i></a>
                    </div>
                </div>
            </div>
<?php
        }

        public function switch_css() {
            // 检查请求参数
            $style = isset($_POST['style']) ? $_POST['style'] : '';
            // style是HTML中选中样式的ID以及按钮标识
            if ($style === 'wooster-custom-style-css') {
                // 设置Cookie记住选中的样式
                setcookie('selected_style', $style, time() + 3600, COOKIEPATH, COOKIE_DOMAIN);
                echo plugins_url('assets/css/compagnon-wooster.css', __FILE__);
            } elseif ($style === 'csspartner-css') {
                // 设置Cookie记住选中的样式
                setcookie('selected_style', $style, time() + 3600, COOKIEPATH, COOKIE_DOMAIN);
                echo plugins_url('assets/css/compagnon-wp.css', __FILE__);
            }

            // 函数末尾必须退出
            exit;
        }

        public function enqueue_styles() {
            // 注册必要的样式和脚本
            wp_enqueue_style('wooster-banner', plugins_url('assets/css/banner.css', __DIR__));
            wp_enqueue_style('font-awesome', 'https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.4/css/all.min.css', array(), '5.15.4');

            wp_enqueue_script('jquery'); // JS库
            wp_enqueue_script('wooster-banner', plugins_url('assets/js/banner.js', __DIR__), array('jquery'), null, true);
        }
    }
    new WoosterBanner();
}

切换按钮JavaScript代码

var currentStyle = 'style_wordpress'; // 设置默认样式

document.getElementById("wooster-exchange-button").addEventListener("click", function() {
    var style1 = document.getElementById('style_wordpress');
    var style2 = document.getElementById('style_wooster');

    if (currentStyle === 'style_wordpress') {
        style1.disabled = true;
        style2.disabled = false;
        currentStyle = 'style_wooster';
    } else {
        style1.disabled = false;
        style2.disabled = true;
        currentStyle = 'style_wordpress';
    }
});

内容的提问来源于stack exchange,提问作者OceaneEMILE

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 08:37:02