带有标题文本的随机主页背景图像

时间:2013-07-23 作者:Andrew

全部的我正在开发一个Wordpress主题,我需要在主页上显示一个随机的背景图像,每个图像都有特定的文本。

我已经安装了后台管理器插件(http://wordpress.org/plugins/background-manager/), 但它只支持在图像集上显示覆盖,我看不到一种简单的自定义方法。

作为替代,我找到了这篇网站文章(http://wpdevsnippets.com/full-page-screen-background-image-slideshow-easy/), 它包含一个显示随机背景图像的基本脚本。我能想象的使其适用于该网站的唯一方法是在Wordpress中为背景图像添加自定义内容类型,然后允许为这些内容项添加特色图像和摘录。

我迷茫的是如何从模板页面(循环之外)调用这些图像,然后在页面内容中,从随机选择的图像调用标题或标题。

下面是来自另一个站点示例的所有代码。任何帮助或指示都将是巨大的帮助。

HTML:

<div id="full-bg">
<img class="full-bg" src="http://wpdevsnippets.com/snippets-media/bg/hires-bg1.jpg" />
<img class="full-bg" src="http://wpdevsnippets.com/snippets-media/bg/hires-bg2.jpg" />
<img class="full-bg" src="http://wpdevsnippets.com/snippets-media/bg/hires-bg3.jpg" />
<img class="full-bg" src="http://wpdevsnippets.com/snippets-media/bg/hires-bg4.jpg" />
</div>
CSS:

html, body {
    height: 100%;
}
#full-bg img {
    position:fixed;
    top:0;
    left:0;
    height:100%;
    width:100%;
    z-index:-10;
    opacity: .9;
}
Javascript:

<script type="text/javascript">
jQuery(document).ready(function($) {

/* random ordering of images */
var $fullBGs = $("#full-bg img"),
    $copies = $fullBGs.clone(true);

[].sort.call($copies, function() { return Math.random() - 0.5; });

$copies.each(function(i){
    $fullBGs.eq(i).replaceWith(this);
});

    setInterval(function(){
        $(\'#full-bg img.active\').animate({opacity:0},500, function(){
            $(this).removeClass(\'active\');
        })
        if($(\'#full-bg img.active\').next().length>0)
            $(\'#full-bg img.active\').next().animate({opacity:1},500).addClass(\'active\');
        else
            $(\'#full-bg img:first\').animate({opacity:1},500).addClass(\'active\');

    } ,4000);
    $(\'#full-bg img:first\').animate({opacity:1},400).addClass(\'active\');
});
</script>

1 个回复
最合适的回答,由SO网友:gmazzap 整理而成

首先,我不认为只为背景创建自定义帖子类型是正确的选择:背景是图像,图像已经有了自己的帖子类型:attachment.

如果你有Worpress 3.5+ 您可以注册custom taxonomy 对于附件,请调用它,例如“image\\u scope”:

register_taxonomy(\'image_scope\', \'attachment\', $args );
对于$args 数组请参见codex, 但要确保

  • $args[\'public\'] = true
  • $args[\'show_ui\'] = true
  • $args[\'show_admin_column\'] = true
  • $args[\'update_count_callback\'] = \'_update_generic_term_count\'
在您的媒体管理器中,您将此分类设置为特定的术语,例如“背景”。

现在,在模板文件中,您可以使用自定义wp\\U查询,使用tax\\U查询仅选择分类法image\\u scope设置为“background”的背景:

$args = array(
  \'post_type\' => \'attachment\',
  \'post_status\' => \'inherit\',
  \'posts_per_page\' => -1,
  \'orderby\' => \'rand\',
  \'tax_query\' => array(
      array(
        \'taxonomy\' => \'image_scope\',
        \'field\' => \'slug\',
        \'terms\' => \'background\'
      )
  );
);
$bg_query = new WP_Query( $args );
如您所见,顺序已经随机化,因此当您在模板上打印它时,不需要通过js随机化。

因此,在模板中,在查询之后,您将拥有:

if ( $bg_query->have_posts() ) :
  echo \'<div id="full-bg">\';
  $i = -1;
  while( $bg_query->have_posts() ) :
    $i++;
    $bg_query->the_post();
    $url = wp_get_attachment_url( get_the_ID() );
    $class = $i == 0 ? \'full-bg active\' : \'full-bg\';
?>
<img class="<?php echo $class; ?>" src="<?php echo $url; ?>" alt="<?php the_title; ?>" data-desc="<?php the_excerpt(); ?>" />
<?php
endwhile;
echo \'</div>\';
endif;
wp_reset_postdata();
?>
以及javascript:

jQuery(document).ready(function($) {

function handle_active() {
  var $active = $("#full-bg img.active");
  var title = $active.attr(\'alt\');
  var desc = $active.data(\'desc\');
  alert(\'Active title is\' + title + \' and active description is \' + desc);
}

setInterval(function(){
  var $active = $("#full-bg img.active");
  $active.animate( {opacity:0}, 500, function(){
    $(this).removeClass(\'active\');
  });
  if( $active.next(\'img\').length > 0 ) {
    $active.next(\'img\').addClass(\'active\').animate( {opacity:1}, 500, function() {
      handle_active();
   });
  } else {
    $(\'#full-bg img\').eq(0).addClass(\'active\').animate( {opacity:1}, 500, function() {
      handle_active();
   });
  }
}, 4000);

handle_active();

}
当然,更改handle\\u active()函数以满足您的需要。

希望有帮助,但请注意代码是not 经过测试,我not js开发人员。。。

结束

相关推荐

Resize uploaded images

Possible Duplicate:Resizing all images 我有一个我建立的新闻门户,客户想要不同大小的特色图片。我已经准备好了我想要的第一个尺寸,他们已经发布了大约200多篇帖子,都准备好了这个尺寸。现在,如果我改变大小,它只会在新帖子上改变/或重新上传当前的特色图片(手工操作太多了)。我的问题是,有没有办法调整上传图像的大小?