覆盖 wp-login.php 样式

Posted

技术标签:

【中文标题】覆盖 wp-login.php 样式【英文标题】:Override wp-login.php styles 【发布时间】:2015-03-21 20:27:09 【问题描述】:

我有一个 Wordpress CMS 网站,其中大多数标签都需要是白色的。所以主题包括每个表单标签的以下样式。

.login label 
    color: #fff;
    font-size: 14px;

上面的样式是从 /wp-login.php 文件中填充的——样式本身位于 login.min.css 中(直接包含在 wp-login.php 中)

我只需要在忘记密码屏幕上覆盖它。

幸运的是,在这种情况下,我需要为黑色的两个标签提供自定义 ID 选择器。 #pass1 #pass2

我的问题是,我无法访问 /wp-login.phplogin.min.css -- 我尝试添加 !important 并在 header.php 中声明这两个选择器,但它们没有被读取。

我需要以某种方式添加;以目前的许可情况。

#pass1 color: #000 !important;

#pass2  color: #000 !important; 

我可以使用来自header.phpfooter.php 的jQuery 来附加样式吗?会读吗?

【问题讨论】:

正如其他人所说,您不应该修改 /wp-admin/ 或 /wp-includes/ 中的任何文件。当 Wordpress 更新时,它们都会被覆盖。您希望将所有更改保留在 /wp-content/ 中。很可能在您的主题目录中。 【参考方案1】:

编辑任何 wp 核心文件不是最佳做法,所以我建议不要碰 wp-login.php,因为更新 WordPress 会重置。

相反,将其添加到您的functions.php:

 // Custom login
function custom_login() 
        $files = '<link rel="stylesheet" href="'.get_bloginfo('template_directory').'/css/login.css" />';
        echo $files;

add_action('login_head', 'custom_login');

【讨论】:

【参考方案2】:

由于登录和忘记密码屏幕与主题无关,您的header.php 文件将不会被读取,因此您在其中放置的任何样式都不会影响这些页面。

将此添加到您的 template.php 文件中

function my_login_stylesheet() 
    wp_enqueue_style( 'custom-login', get_template_directory_uri() . '/style-login.css' );

add_action( 'login_enqueue_scripts', 'my_login_stylesheet' );

然后将您的自定义样式添加到style-login.css

【讨论】:

【参考方案3】:

login_headlogin_enqueue_scripts 是called one after another,所以不管你用的是哪一个...

使用wp_enqueue_style 是最佳做法,但也可以使用echo '&lt;link rel="stylesheet" ...&gt;'; 没有问题。

我正在添加一个解决方案,因为这不是您直接放到主题 functions.php 上的那种代码。即使我们交换主题,我们也希望保持代码运行。所以functionality plugin 就派上用场了:

<?php
/*
    Plugin Name: Login CSS
*/
function custom_login() 
   $CSS = <<<CSS
        <style>
            .login label 
        </style>
CSS;
    echo $CSS;

add_action('login_head', 'custom_login');

检查以下内容以了解用于构建 $CSS 字符串的 Heredoc 语法:What is the advantage of using Heredoc in PHP ?

【讨论】:

以上是关于覆盖 wp-login.php 样式的主要内容,如果未能解决你的问题,请参考以下文章

样式化组件不会覆盖内联样式

如何覆盖(覆盖)material-ui(React)中的类和样式

CSS样式中如何将下面的元素覆盖上面的元素?

antd 覆盖样式化组件

React 组件样式被全局样式覆盖

WPF 默认窗口样式覆盖