WordPress主题正确使用Bing每日一图


Notice: Undefined variable: image_url in /home/wwwroot/hanost/wp-content/themes/lerm/inc/admin/shortcode.php on line 99

前面分享了一片关于使用Bing搜索每日图片的一篇文章,详见《WordPress主题使用bing每日一图》。这篇文章介绍了获取和使用Bing搜索每日一图的方法:即把代码存为PHP格式,这个PHP文件就相当于图片,你可以在需要的地方直接引用这个php文件。但是由于是直接引用PHP文件,所以对安全问题比较担心,而且使用Theme Check插件检测主题时,出现了警告错误,如下:
WARNING: file_get_contents was found in the file <strong>bing.php</strong> File operations should use the WP_Filesystem methods instead of direct PHP filesystem calls.意思是说文件操作应使用WP_Filesystem方法替代php的file_get_contents方法。

解决办法

使用过Bing搜索的人都知道。Bing每日一图非常棒,而且每天都不一样。于是就想办法解决问题。在网上找到另外一种使用必应搜索每日一题的方法,代码如下:

<?php $url = 'http://www.bing.com/HPImageArchive.aspx?format=js&idx=0&n=1&mkt=';
$resolution = '1920x1080';//图片尺寸

// 多语言选项
$locale = array(
  "en-US",
  "zh-CN",
  "ja-JP",
  "en-AU",
  "en-UK",
  "de-DE",
  "en-NZ"
);

// 参数
foreach ($locale as $lang) {
  $URL = $url . $lang;
  $data = file_get_contents($URL);
  $json = json_decode(trim($data), true);
  if ($json) {
    $images = $json['images'];
    foreach ($images as $image) {
      $urlbase = $image['urlbase'];
      $image_url = 'http://www.bing.com' . $urlbase . '_' . $resolution . '.jpg';

    }
  }
}?>

以上代码也可以获取到Bing搜索每日一图,而且增加可以自定义图片的尺寸,生成图片的URL地址,可以直接引用。但是file_get_contents()依然会被报出前面的警告错误。

查阅官方文档https://codex.wordpress.org/Filesystem_API,使用WP_Filesystem最主要的原因就是安全。解决的办法就是将file_get_contents()替换成WP_Filesystem方法,具体方法如下:
将上一段代码中的$json = json_decode(trim($data), true);替换成

$request = wp_remote_get($URL);
$data = wp_remote_retrieve_body( $request );

然后使用Theme Check检查主题,没有出现报错,问题圆满解决。以上的代码会生成一个图片的url地址,例如:http://www.bing.com/az/hprichbg/rb/SingleCrane_ZH-CN11987665683_1920x1080.jpg。将代码放在你需要引用的地方即可。

功能演示

bing image

接下来你就可以发挥自己的想象力了,可以放在WordPress主题的任何地方。可以作为登陆界面背景图使用。也可以做成短代码,放在文章或者页面中。

下载代码

这是一个php文件,可以放在本地php环境进行测试。

百度云盘:http://pan.baidu.com/s/1boK2dHl

发表评论


  1. Warning: copy(): php_network_getaddresses: getaddrinfo failed: Name or service not known in /home/wwwroot/hanost/wp-content/themes/lerm/functions.php on line 613

    Warning: copy(https://cn.gravatar.com/avatar/84c3952cf2fff4db6e941362a4581cef?s=50&d=mm&r=g): failed to open stream: php_network_getaddresses: getaddrinfo failed: Name or service not known in /home/wwwroot/hanost/wp-content/themes/lerm/functions.php on line 613
    闲鱼
    回复

    蛮不错的,就是一直没想到用在什么地方