ACF作为背景图像与悬停

时间:2016-08-05 13:37:43

标签: wordpress background hover advanced-custom-fields

在页面上,我想显示包含所有相关联的子页面的列表。在子页面上,我为图​​像添加了2个自定义字段。 "正常"对于正常状态,"悬停"悬停状态。

这是我的代码:

<?php
$args = array(
'post_type'      => 'page',
'posts_per_page' => -1,
'post_parent'    => $post->ID,
'order'          => 'ASC',
'orderby'        => 'menu_order'
);                                                              
$parent = new WP_Query( $args );                                    
if ( $parent->have_posts() ) : ?>                                   
    <?php while ( $parent->have_posts() ) : $parent->the_post(); ?> 
        <?php 
            $image = get_field('normal');
            $hover = get_field('hover');
            if( !empty($image) ): ?>                                                
                <style type="text/css"> 
                     .preview-page { 
                         background-image: url('<?php echo $image['url']; ?>'); 
                     } 
                     .preview-page:hover { 
                         background-image: url('<?php echo $hover['url']; ?>'); 
                     }    
                </style>                                            
        <?php endif; ?>
        <a class="preview-page" href="<?php the_permalink() ?>">                                            
            <span><?php the_title(); ?></span>
        </a><!-- end #category-name -->                         

    <?php endwhile; ?>                                  
<?php endif; wp_reset_query(); ?>

我的问题是,所有子页面都显示有自己的标题,但都具有相同的背景图像(最后一个子图像)。如何实现每个子页面都有正确的背景图像?我想这是循环中的一些失败。

当我以常规img-tag显示图像时,它们会显示正确。

更新:这里是一个测试链接,您可以在其中查看原则,但始终是最后一个子页面的2张图片:http://dev.communicaziun.ch/wuest/jetzt-bei-wuest/

1 个答案:

答案 0 :(得分:2)

这种情况正在发生,因为循环中的每个标记都会覆盖前一个标记中的样式。尝试这样的事情:

<?php
$args = array(
'post_type'      => 'page',
'posts_per_page' => -1,
'post_parent'    => $post->ID,
'order'          => 'ASC',
'orderby'        => 'menu_order'
);                                                              
$parent = new WP_Query( $args );                                    
if ( $parent->have_posts() ) :
    $i=0; ?>                                   
    <?php while ( $parent->have_posts() ) : $parent->the_post(); ?> 
        <?php 
            $i++;
            $image = get_field('normal');
            $hover = get_field('hover');
            if( !empty($image) ): ?>                                                
                <style type="text/css"> 
                     .preview-page<?php echo $i; ?> { 
                         background-image: url('<?php echo $image['url']; ?>'); 
                     } 
                     .preview-page<?php echo $i; ?>:hover { 
                         background-image: url('<?php echo $hover['url']; ?>'); 
                     }    
                </style>                                            
        <?php endif; ?>
        <a class="preview-page preview-page<?php echo $i; ?>" href="<?php the_permalink() ?>">                                            
            <span><?php the_title(); ?></span>
        </a><!-- end #category-name -->                         

    <?php endwhile; ?>                                  
<?php endif; wp_reset_query(); ?>

这将使用类预览页面设置每个项目以具有唯一标识符。该唯一标识符也会出现在您的代码中,因此不会覆盖样式。

所以你的第一个会这样:

<a class="preview-page preview-page1" href="MY LINK HERE">                                            
    <span>MY TITLE HERE</span>
</a>

第二个看起来像这样:

<a class="preview-page preview-page2" href="MY LINK HERE">                                            
    <span>MY TITLE HERE</span>
</a>

依旧......

然后你的第一个元素是:

<style type="text/css"> 
    .preview-page1 { 
        background-image: url('MY IMAGE URL'); 
    } 
    .preview-page1:hover { 
        background-image: url('MY OTHER IMAGE URL'); 
    }    
</style> 

,你的第二个将是相同的,但在类名末尾加上“2”而不是1。