在伪元素中获取特色图片(即:之前或之后)- WordPress

Get Featured Image in pseudo elements( i.e. :before or :after) - WordPress

我想在伪元素中获取 WordPress 特色图片。我使用以下代码以内联样式使用它

<?php
$thumb_url = wp_get_attachment_image_src(get_post_thumbnail_id($whatWeDo_post->ID), 'single-post-thumbnail' );
?>

<div style="background-image: url(<?php echo $thumb_url[0]; ?>);">

但是我想在伪元素中使用它

这是从 Lister 先生的评论中提取出来的,但这是执行此操作的方法。这不是构建 html 的最佳方式,但它应该有效:

<?php $thumb_url = wp_get_attachment_image_src(get_post_thumbnail_id($whatWeDo_post->ID), 'single-post-thumbnail' ); ?>
<div class="myDiv"></div>
<style type="text/css">
.myDiv:before{
    background-image: url('<?php echo $thumb_url[0]; ?>');
    content: '';
}
</style>

我不确定您是否会 运行 遇到一些与旧版浏览器和 之外的标记的浏览器兼容性问题,但它应该适用于现代浏览器。

选项 1

这里您主要关心的是缓存。您不想将 background-image 样式写入外部 .css 文件,因为它可能会在每一页上发生变化。但是您不想用大量额外的内联样式阻塞主 HTML 文件。

您最好的选择是只分离您不想缓存的内容(background-image 和其余样式)。我们只想内联不应该缓存的内容,而将其余内容保留为外部 .css 文件。

假设与您的精选图片容器相关的样式是这样的:

figure::before {
    display:block;
    height:300px;
    width:500px;
    margin:0;
    background-image:url();
    background-size:cover;
    background-position:center center;
}

只保留您的 .css 文件完全相同的格式(不要使用 .css.php),但拉出 background-image 行。

然后在 header 中放置:

<style>
    figure::before {
        <?php $thumb_url = wp_get_attachment_image_src(get_post_thumbnail_id($whatWeDo_post->ID), 'single-post-thumbnail' ); 
        background-image: url(<?php echo $thumb_url[0];?>);
    }
</style>

奖金 - 另一种娱乐选择

第二个选项是使用 .php 文件和 .css HTTP header。我喜欢将我的文件命名为:

styles.css.php

优势

这让您可以直接在样式表中使用 WordPress 变量和数据,以及 PHP 的全部功能。但它仍然作为 .css 文件发送到浏览器,因此您可以像往常一样将其加入队列。这是最容易实现的。注意,一定要包含全局 post object.

缺点

你使用资源缓存吗?如果您 .css 文件被缓存,您将 运行 遇到问题,因为文件不会在每一页上更改。在您的特定情况下,每个页面上的特色图片都会有所不同。如果你不缓存,应该没问题,但你绝对应该缓存,所以你应该跳过这个选项。


调整奖金选项

如果您喜欢选项 1 但确实缓存(您应该这样做),则可以采取中间立场。创建与上面相同的文件,例如:

styles.css.php

您可以使用 PHP 的 include 读取文件,而不是使用 wp_enqueue_style 将其放入 official way 队列功能。

在您的 functions.php 文件中创建函数:

function writeInlineCSS() {

    include TEMPLATEPATH . '/styles/styles.css.php';
}

然后在您的 header 中添加:

<style>
    <?php writeInlineCSS(); ?>
</style>

CSS 将被拉入并内联写入。

优势

缓存不会成为问题。此外,您不会有大型渲染阻塞 .css 资源。加上选项 1 的优势。

缺点

您可能包含大量 CSS 内联。可能太多了。