可以使用页面的特色图像作为不带内联的css背景吗?

时间:2017-06-30 作者:lastnoob

所以,我对WordPress完全陌生,并且尝试将静态站点“转换”为WP主题。

我有一个页面,我想使用特色图像作为div的背景。

我想知道最好的方法是什么,或者说大会是怎么做的?

无论是特色图片还是其他什么,我只希望用户能够从仪表板更改图像。

如果可能的话,我会避免内联,那么这是唯一的选择吗?

3 个回复
SO网友:Den Isahac

从动态生成的值创建样式表有两种可能的选择。第一个选项是Inline stylesheet, 具体如下:

<div id="hero" 
  style="background-image: url(<?php // TODO retrieve image here. ?>); ">
</div>
第二种选择是使用Internal stylesheet, 而且可能是两者中最好的解决方案。在内部使用样式表需要div 可能分配ID或类代码的标识符如下:

<div id="hero"></div>
TheInternal stylesheet:

<style>
    #hero {
       background-image: url(\'<?php // TODO retrieve image here. ?>\');
       background-position: 50% 50%;
       background-size: cover;
    }
</style>
使用External stylesheet 无法从数据库中检索和分配图像的值。您仍然可以将外部样式表用于div; i、 e。#hero, 并通过内联/内部样式表检索和分配图像。

SO网友:cjbj

显然,由于您希望每个页面都有不同的背景图像,因此不能在静态文件中包含css。您必须动态生成它。

最简单的方法是在<style> 模板文件中的标记。其他答案向您展示了如何做到这一点。

最“WordPress”的方式会有所不同,即在您的functions.php 文件为虚拟样式表,使用wp_add_inline_style. 从本质上讲,这意味着您正在将一些语句添加到已经存在的css文件中。您的样式最终会出现在页面的头部,即它所属的位置,而不是正文(正文有效,但语义不正确)。

因此,在函数文件中,例如:

add_action (\'wp_enqueue_style\',\'wpse271934_add_styles\');
function wpse271934_add_styles () {
  global $post;
  $extra_styling = \'\';
  if (is_page() || is_single ()) {
    $image = get_the_post_thumbnail ($post->ID,\'large\');
    if (!empty($image))
      $extra_styling = \'.post, .page {background:url(\' . $image . \');}\';
    }
  // assuming style.css has the handle \'main_style\' in your theme
  wp_add_inline_style (\'main_style\', $extra_styling);
  }
在上面的示例中(我没有测试,所以要注意bug),我们将背景图像添加到单个页面和帖子中。但你有更多的可能性。比如说testing for 404 页面并为此定义背景图像,如果没有背景,则插入特定的背景,对不同类别的页面执行不同的操作,等等。因此,除了是最正确的方法之外,这也给了你最大的可能性来控制你的背景。

SO网友:samjco

Here is an example of in-page styling. :)

<?php get_header();          


     <div id="primary" class="content-area">
       <main id="main" class="site-main" role="main">

          <?php
          // Start the loop.
          while ( have_posts() ) : the_post();

           if ( has_post_thumbnail( $_post->ID ) ) { ?>

           <style>
            .featureimg{
            /* dynamic img url */
            background: url(<?= get_the_post_thumbnail( $_post->ID,\'large\' );?>);

            /* full width */
            width:100%;

            /* half height */
            height: 50%; 

            /* Center and scale the image nicely */
            background-position: center;
            background-repeat: no-repeat;
            background-size: cover;
            }
          </style>

              <div class="featureimg"></div>
              <div class="title"><?php the_title();?></div>
              <div class="content"><?php the_content();?></div>


            <?php           
            // If comments are open or we have at least one comment, load up the comment template.
              if ( comments_open() || get_comments_number() ) :
                comments_template();
              endif;

            // End the loop.
            endwhile;
            ?>

         </main><!-- .site-main -->
       </div><!-- .content-area -->

    <?php get_footer(); ?>
结束

相关推荐

强制移除父主题css/js并从子主题中调用它们

我使用多个站点,只有一个站点。我想强制我的父主题不要调用任何css/js。同时,我想强制我的子主题使用其函数包含新的CSS/JS。php文件。我在这个伟大的门户网站上看到了许多建议,但没有一个对我有用。我的问题是我无法阻止父主题函数。php停止加载CSS/JS你能用一个CSS的例子和一个Js的例子解释一下吗?非常感谢。