2016-03-04 36 views
0

我对PHP和WordPress有点新,我正在尝试基于用户所在页面的样式来设置菜单插件(它们的支持很繁忙)。

我想要的是背景和其他风格改变,如果它不在首页。在WordPress中使用PHP更改CSS样式

我已经在inspect元素中测试过CSS,所以选择器是正确的,但我真的不知道如何以一种干净有效的方式实现这一点。

乱七八糟的方法是创建另外两个菜单(因为top_navigation和main_menu是独立的,所以共有4个)样式,并且当它们不在头版时,将其他两个菜单替换为另外两个菜单使用PHP。所以如果我需要改变菜单的项目,我必须做两到四次,这对我来说是愚蠢的。


到目前为止,我想出了创建样式表的PHP变种和重写URL从的CSS重定向到.PHP但是我真的没有对我会怎么做,牢牢把握这个来自根目录的.htaccess,因为这两个样式表的位置远离它。样式表的

地点:/wp-content/plugins/hmenu/_frontend_files/_menu_5/_css
样式表的名称:hero_menu_styles.csshero_menu_styles.php
PHP样式表:

<?php 
header('Content-type: text/css; charset: UTF-8'); 
?> 

/* Normal CSS Here */ 

<?php 
if(!is_front_page()) 
{ 
echo "#hmenu_load_5 .hmenu_main_holder {background-color: #67b7e1;}" 
} 
?> 

的.htaccess:
我几乎可以100%肯定有东西这个错了。
虽然我不知道该怎么做。

# BEGIN WordPress 

<IfModule mod_rewrite.c> 
RewriteEngine On 
RewriteBase "/wp-content/plugins/hmenu/_frontend_files/_menu_5/_css/" 
RewriteRule ^hero\_menu\_styles\.css$ hero\_menu\_styles\.php [L] 
</IfModule> 

<IfModule mod_rewrite.c> 
RewriteEngine On 
RewriteBase/
RewriteRule ^index\.php$ - [L] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule . /index.php [L] 
</IfModule> 

# END WordPress 

所以我有一大堆的问题。

  1. 是否回音的工作,我目前正在写它假定它是在一个stylesheet.php而不是stylesheet.css中的方式吗?
  2. 如果我要在我的所有页面上引用额外的stylesheet.php,并将其放在那里而不是重写我的URL,该怎么办?有没有办法确保它会覆盖其他样式表?
  3. 我可以拥有多个.htaccess文件
    (例如/可湿性粉剂内容/插件/ HMENU/_frontend_files/_menu_5/_css)
    所以我没有用长RewriteBase头痛打扰?
  4. 我是正确的,我不能只是将这个代码+ CSS插入到我的WordPress主题的header.php或functions.php?
  5. 我是否需要('/ wp-load.php');或者如果我想使用is_front_page(),则在我的.php样式表中加载一些WordPress函数(不知道除了wp-load以外)。

回答

1

如果您需要根据您是否在首页上设置菜单的样式。然后,您可以根据您需要更改的内容简单地使用CSS选择器。

目标主页菜单风格:

body.home .menu-class {background: #333;}

在页面上

目标菜单:

body.page .menu-class {background: #FFF;}

你可以找到更多的场景和自己的班级在这里:https://codex.wordpress.org/Function_Reference/body_class

+0

是。针对标准的WordPress主体类绝对是这个方法。 –

+0

因此,根据我的理解,如果我将某种样式应用于归档的菜单,它会是'body.archive#menu_load_5 .hmenu_main_holder {background-color:#67b7e1; }' – EndingLegacy

+0

@EndingLegacy正确。你可以从上面提供的链接中看到,你可以使用许多不同的主体类来定位特定的元素。 – fostertime

0

尝试这段代码。

echo "<style> 
#hmenu_load_5 .hmenu_main_holder 
{ 
background-color: #67b7e1; 
} 
</style>";