Changing CSS Style using PHP in WordPress

时间:2016-03-04 18:12:16

标签: php html css wordpress .htaccess

I'm somewhat new to PHP and WordPress and I'm trying style a menu plugin (their support is busy) based on what page the user is on.

What I want is for the background and other styles to change if it isn't on the front page.

I've tested the CSS in inspect element so the selectors are correct, but I don't really know how to implement this in a clean and effective way.

The messy way would be to create another two menus (because top_navigation and main_menu are separate so 4 total) style those in their plugin settings and replace the two menus on the front page with two other ones when not on the front page using php. So if I need to make a change the menu's items I'd have to do it for two or four times which to me is stupid.


So far I've come up with creating a PHP variant of the style sheet and rewriting the URL to redirect from .css to .php however I don't really have a firm grasp on how I would do this from the root directory's .htaccess as the location of the two style sheets are far from it.

Location of style sheets:/wp-content/plugins/hmenu/_frontend_files/_menu_5/_css
Name of style sheets: hero_menu_styles.css and hero_menu_styles.php
PHP Style sheet:

<?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:
I am almost 100% sure there is something wrong with this.
I have no idea what though.

# 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

So I have a bunch of questions.

  1. Does echo work the way that I'm currently writing it assuming that it is in a stylesheet.php rather than a stylesheet.css?
  2. What if I were to reference an additional stylesheet.php on all my pages and just put it in there rather than rewriting my URLs? Is there a way to make sure it would override the other stylesheets?
  3. Can I have multiple .htaccess files
    (for example in /wp-content/plugins/hmenu/_frontend_files/_menu_5/_css)
    so I don't have to bother with long RewriteBase headaches?
  4. Am I correct in that I cannot just stick this code+css into my WordPress theme's header.php or functions.php?
  5. Do I need to require('/wp-load.php'); or load some WordPress functions (no idea what other than wp-load though) on my .php stylesheet if I wanted to use is_front_page()?

2 个答案:

答案 0 :(得分:1)

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

目标主页菜单样式:

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

页面上的目标菜单:

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

您可以在此处找到更多方案及其课程:https://codex.wordpress.org/Function_Reference/body_class

答案 1 :(得分:0)

试试这段代码。

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