0

如果在 Wordpress 主题中有条件,我正在尝试创建一个不那么笨重的版本。我试图弄清楚如何在不打开和关闭样式标签两次的情况下做到这一点:

<?php if (get_theme_mod( 'main_color' )) : ?>
  <style>
    #branding {
        background: <?php echo get_theme_mod( 'main_color', '#243964' )."\n"; ?>;
    }
    a:link {
        color: <?php echo get_theme_mod( 'main_color', '#243964' )."\n"; ?>;
    }
  </style>
  <?php endif ?>
  <?php if (get_theme_mod( 'links_color' )) : ?>
  <style>
    #wrapper a:link {
        color: <?php echo get_theme_mod( 'links_color', '#6C84B4' )."\n"; ?>;
    }   
  </style>
  <?php endif ?>

我试图将两者与以下内容结合起来:

<?php if (get_theme_mod( 'main_color' || 'links_color' )) : ?>
      <style>
        #branding {
            background: <?php echo get_theme_mod( 'main_color', '#243964' )."\n"; ?>;
        }
        a:link {
            color: <?php echo get_theme_mod( 'main_color', '#243964' )."\n"; ?>;
        }
        #wrapper a:link {
            color: <?php echo get_theme_mod( 'links_color', '#6C84B4' )."\n"; ?>;
        }   
      </style>
      <?php endif ?>

但由于某种原因,这不起作用。

有什么帮助吗?

4

5 回答 5

1

尝试:

<?php if (get_theme_mod( 'main_color') || get_theme_mod( 'links_color' )) : ?>
于 2012-09-19T12:58:04.747 回答
1
<?php if (get_theme_mod( 'main_color' || 'links_color' )) : ?>

应该

<?php if (get_theme_mod( 'main_color') || get_theme_mod('links_color') )) : ?>

因为get_theme_mod()是一个你传递参数给它的函数。您可以更改该函数以接受多个参数,然后您可以调用该函数:

<?php 
function get_theme_mod($main_color, $links_color) {
   // do stuff and return bool
}

if (get_theme_mod( 'main_color', 'links_color' )) : 
?>

这也不是您尝试做的主要问题,但您应该终止<?php endif; ?>

于 2012-09-19T12:58:09.507 回答
1

再次阅读您的帖子后,我想这就是您要实现的目标:

<style>
<?php if (get_theme_mod( 'main_color' )) : ?>
    #branding {
        background: <?php echo get_theme_mod( 'main_color', '#243964' )."\n"; ?>;
    }
    a:link {
        color: <?php echo get_theme_mod( 'main_color', '#243964' )."\n"; ?>;
    }
<?php endif ?>
<?php if (get_theme_mod( 'links_color' )) : ?>
    #wrapper a:link {
        color: <?php echo get_theme_mod( 'links_color', '#6C84B4' )."\n"; ?>;
    }   
<?php endif ?>

</style>

这将仅显示所需的 css 代码,具体取决于主题选项,但您将只有一个<style>标签打开和关闭。

于 2012-09-19T12:59:23.437 回答
0
<?php if (get_theme_mod( 'main_color' ) || get_theme_mod( 'links_color' )) : ?>
<style type="text/css">
<?php endif ?>
<?php if (get_theme_mod( 'main_color' )) : ?>
#branding {
    background: <?php echo get_theme_mod( 'main_color', '#243964' )."\n"; ?>;
}
a:link {
    color: <?php echo get_theme_mod( 'main_color', '#243964' )."\n"; ?>;
}
<?php endif ?>
<?php if (get_theme_mod( 'links_color' )) : ?>
#wrapper a:link {
    color: <?php echo get_theme_mod( 'links_color', '#6C84B4' )."\n"; ?>;
}   
<?php endif ?>

<?php if (get_theme_mod( 'main_color' ) || get_theme_mod( 'links_color' )) : ?>
</style>
<?php endif ?>
于 2012-09-19T13:15:33.743 回答
0

上面的答案很好,但我认为他们遗漏了一些东西。

原始代码将:

  • 如果满足条件 A,则添加某些样式。
  • 如果满足条件 B,它将添加其他样式。

像这样组合它们:

<?php if (get_theme_mod( 'main_color') || get_theme_mod( 'links_color' )) : ?>

修复了 OP 尝试中的错误,但 OP 的尝试并不是他们最初的简单打印目标的精确解决方案"less style tags"。这是因为如果满足其中任何一个条件,则将应用两种样式。

(也许这是所需的功能?)

Geralds 的答案更接近,因为它坚持原来的逻辑,但它总是会打印一个STYLE标签,不管它是否被满足。鉴于最初的发帖人希望“清理他们的 HTML”,STYLE只有在有要打印的样式时才发布标签仍然是一个更好的解决方案。

解决方案是在 PHP 中执行所有逻辑,将 HTML 添加到缓冲区,然后在缓冲区不为空时打印该缓冲区。您可以通过使用实际缓冲区ob_start()或仅将字符串保存到变量中来做到这一点。我将使用更直接的“保存到变量”方法。

<?php
// initialize the buffer we'll save our style strings too
$buffer = '';
// save the styles to the buffer for main
if (get_theme_mod( 'main_color' )) {
    $buffer .= 
    "#branding {
         background: " . get_theme_mod( 'main_color', '#243964' ) . "\n
    }
    a:link {
         color: " . get_theme_mod( 'main_color', '#243964' ) . "\n
    }\n";
}
// save the styles to the buffer for link colors
if (get_theme_mod( 'links_color' )) {
    $buffer .= 
    "#wrapper a:link {
          color: " . get_theme_mod( 'links_color', '#6C84B4' ) . "\n
    }\n";
}

// verify there's styles to print and print them into a single STYLE tag
if(!$buffer) {
    echo "<style>" . $buffer . "</style>";
}

?>

这会:

  1. 在添加其他样式时保持相同的逻辑
  2. 只打印一个STYLE标签
  3. STYLE如果有要打印的样式,则仅打印标签

我希望这会有所帮助!

于 2012-09-19T13:42:09.853 回答