如何将背景颜色与PHP匹配以匹配文本颜色?

时间:2015-11-05 16:03:49

标签: php css wordpress advanced-custom-fields

我是使用PHP的初学者!我知道之前有这样的问题,然而,它们也不像我想要的那样对我有效。

这是&#39>发生了什么: 我有多个背景图像,我使用css和php实现。到目前为止,这些图像中的每一个都是黑色,白色和蓝色。我希望能够写一些PHP ...再次我是一个初学者,所以请原谅我的无知...将背景图像更改为上面列出的任何一个,以匹配文本的颜色。

有些事情需要注意: 这是在php文件上完成的。该文件还对应于wordpress(ACF)插件。我可以在这个wordpress插件上更改文本颜色。我已经尝试过使用github,我已经看过这个网站上的以前的答案和谷歌,但是,我相信我对php和javascript的缺乏知识让我更加困惑。我认为我想要实现的目标可以通过简单的if else语句完成。另外值得注意的是我只想在php中回答,而不是javascript或jquery或github(因为这些答案只会让我更加困惑)。请帮忙,谢谢。

这是我到目前为止所写的相关代码的剪辑。

#logo{
   position:absolute;
   top: 17px;
   left: 14px;
   height: 20px;
   padding: 7px 0 0 85px;

   background: url(<?php if $color_text = ("#FFF") 
                {echo ((<? php bloginfo("stylesheet_directory")?>)'/img/image_white.png');}?>);
   /*I wrote the above for background, I see now that you cannot
     have a php statement inside another php statement, How can I fix this?*/

   /*The below is what has been written before*/
   /*background: url(<?php bloginfo("stylesheet_directory")?>/img/image_white.png) no-repeat 0 2px;*/

  /*The below is how text color is determined in the wordpress plugin*/
  /*ignore colors_2 (it responds to a color picker) but I don't want to use it
     colors_text responds to the wordpress plugin where the user can choose white, black, or blue
   I would assume I would need to change the below php statement to work with the php statement regarding the background color change. (I would appreciate help doing this as well)*/

  color: <?php if ($colors_2 || $color_text) {echo ($color_text ? $color_text : $colors_2);}
   else echo '#005b92';?>;
   }

2 个答案:

答案 0 :(得分:0)

我不确定我是否正确理解了您的问题,但如果我这样做,以下内容应该提供您需要的内容:

<?php

$styledir = "stylesheet_directory";
$image = "image_default.png";
$color = "color: #005b92;";

if ($color_text) {

$color = "color: ".$color_text.";";

    switch ($color_text) {
        case ("#FFF") : $image = "image_white.png"; break;
        case ("#000") : $image = "image_black.png"; break;
        case ("#00F") : $image = "image_blue.png"; break;
        default: $image = "image_default.png";
    }
}

$background = "background: url('";
$background .= bloginfo($styledir);
$background .= "/img/";
$background .= $image;
$background .= "'); ";

?>

#logo{
   position:absolute;
   top: 17px;
   left: 14px;
   height: 20px;
   padding: 7px 0 0 85px;
   <?php echo $background; ?>
   <?php echo $color; ?>
}

答案 1 :(得分:0)

由于你有一个有点复杂的if语句,所以不建议把它写成ternary operatorcondition ? true : false),而是使用if语句会更好。

在您的示例中,您使用的是变量名$colors_text$colors_2,但是您没有使用ACF字段值填充它们。您可以使用get_field()函数返回值,并使用the_field()来回显值(类似于循环中的WordPress函数:the_title()get_the_title()) 。您可以在if语句中使用get_field(),因为如果未设置该字段,它将返回false

您还有一些语法错误。虽然你不能在PHP标签中嵌入PHP标签,但是对于“背景”的if语句通常是不正确的。您有if $color_text = ("#FFF")但应该有if ($color_text == "#FFF") - 左边的paren位置错误,您正在使用=(分配)而不是==(逻辑或)。我认为你只想设置背景图像,如果颜色是白色(或更确切地说是“#FFF”,因为“#FFFFFF”也是相同的颜色,但不匹配你的if)。函数bloginfo()将回显结果,因此您无需在代码中echo

<?php
if ( get_field( 'colors_text' ) ){
    // not false, so use the value from color_text
    $color =  get_field( 'colors_text' );
} else 
if ( get_field( 'colors_2' ) ){
    // color_text is not set, but colors_2 is, so use that
    $color =  get_field( 'colors_2' );
} else {
    // the default if neither color_text nor colors_2 are set
    $color = '#005b92';
}
?>
<style>
#logo {
   position:absolute;
   top: 17px;
   left: 14px;
   height: 20px;
   padding: 7px 0 0 85px;

   /* if the upper case $color is either #FFF or #FFFFFF set the background image */
   <?php if ( in_array( strtoupper( $color ), array( "#FFF", #FFFFFF" ) ) ): ?>
   background: url(<?php bloginfo("stylesheet_directory")?>/img/image_white.png) no-repeat 0 2px;
   <?php endif; ?>

   /* this was set in the PHP, so we can just echo it */
   color: <?php echo #color; ?>;
}
</style>