【问题标题】:How to make featured image change automatically based on current time如何根据当前时间自动更改特色图像
【发布时间】:2015-07-13 20:19:30
【问题描述】:

我正在定制一个带有静态首页的 wordpress 网站。我正在使用响应式/动态主题。

我想要做的是使加载在首页上的特色图像会根据时间而有所不同。例如:假设有人在下午 6 点访问我的网站,我希望首页上的特色图片显示夜空图片。但是,如果有人在下午 6 点之前(最早是早上 5 点)访问我的网站,那么特色图片应该会显示白天的天空图片。

我到处寻找插件来为我做这件事,但似乎不存在。我也无休止地在谷歌上搜索,找不到具体的解决方案,但我已经能够找到让我开始的资源。

通过 php 和 sql 从外部源添加特色图片: http://www.wpexplorer.com/wordpress-featured-image-url/ (使用 UPDATE 语句并更改数据库中的图像 url 会更容易)

获取给定时区的时间: Get current date, given a timezone in PHP?

我本可以使用提供的链接中的大量代码来实现我想要的,但我遇到了一个问题。我在 wordpress 数据库中找不到特色图片的图片网址。我查看了 _postmeta 和 _posts 都没有运气。相反,它只显示最初与主题一起出现但后来被更改的图像的图像 url。这可能与我一直在使用 Jetpack 插件(光子)从 wordpress.com 服务器加载我的图像但我已关闭该功能但仍然无法在数据库中找到图像 url 的事实有关.

由于我不是 php 和 sql 方面的专家,因此如果有人能提出解决方案,我会指出正确的方向,甚至更好。我知道这不是一个简单的实现,但绝对值得,因为在其他地方找不到解决方案。

【问题讨论】:

    标签: php html sql wordpress image


    【解决方案1】:

    这可以用 javascript 轻松完成..

    这是我做的一个简单示例: https://jsfiddle.net/p2snuf1a/

    var date = new Date();
    var hours = date.getHours();
    
    var sunset_img= "http://at-cdn-s01.audiotool.com/2014/06/03/documents/85NwUJbwC0Gx0rbiKePSWWcKUqhmdP/0/cover256x256-46428e19514b49058125b21b8107c2eb.jpg";
    
    var night_img = "https://pbs.twimg.com/profile_images/2973095145/47f74748e0c6240db5e0b3034af6da16.jpeg";
    
    
    if(hours > 18){
        document.getElementById('feature_img').setAttribute('src', night_img);
    }
    else{
        document.getElementById('feature_img').setAttribute('src', sunset_img);
    }

    基本上,它获取当前时间,为图像链接设置一些变量(这些也可以是本地存储的图像)。然后它检查小时数是大于还是小于某个时间,所以 18 是下午 6 点。

    您可以为其他时间/图像组合添加更多“else if()”选项。

    如果您的图片位于您的 css 中,您可以使用 '.sytle' 而不是 .setAttribute

    【讨论】:

    • 这真是太棒了 Lizzeiy!然而,唯一的问题是我收到以下错误: Uncaught TypeError: Cannot read property 'setAttribute' of null
    【解决方案2】:

    嗯,这是一项非常简单的任务,但我可以看到它存在一个问题。 PHP 将使用它自己的服务器时间来计算白天和黑夜。因此,如果您的服务器在纽约,并且有人从印度浏览您的网站,它将根据纽约的时间显示图像。因此,要获得用户的本地时间,您必须使用 javascript 或使用 geo locating api 来显示给定位置的确切时间。这是一个例子。

    http://api.geonames.org/timezone?lat=47.01&lng=10.2&username=demo
    

    现在让我们假设您想根据服务器时间更改图像。因此,由于白天和晚上只有 2 张图像,因此硬编码应该不是问题。 (如果您想要自定义字段,可以查看“高级自定义字段”插件,它是在您的帖子中添加自定义字段的绝佳插件)。

    我没有测试过这段代码,但它应该可以工作。

    date_default_timezone_set('America/Chicago');
    
    $am_pm = date('a');
    
    if($am_pm == 'am'){?>
      <img src="<?php echo get_template_directory();?>/images/am.png" alt="Good Morning">
    <?php }elseif($am_pm == 'pm'){?>
      <img src="<?php echo get_template_directory();?>/images/pm.png" alt="Good Evening">
    <?php }?>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-28
      • 2021-03-13
      相关资源
      最近更新 更多