Gallery Pagination by Row

时间:2012-06-09 作者:Josh Rodgers

我在以下位置创建了一个图片库:http://ellenandjosh.com/?page_id=5.

目前,我有一个循环,在一定数量的图像之后显示分页:http://pastebin.com/N6nRRUei.

通常情况下,这很好。。。但通常我没有不同宽度的图像。WordPress按高度裁剪图像,宽度可变。

我想做的是在三行图像之后,然后添加分页按钮。。。而不是在一定数量的图像后显示分页按钮。。。这可能吗?

第1页还可以,虽然底部行中可能会有更多图像-第2页只有两行,第3页第三行只有一个图像-尽管有更多图像。。。它的功能太奇怪了。

欢迎提出任何建议。

谢谢Josh

2 个回复
最合适的回答,由SO网友:Josh Rodgers 整理而成

这绝对是可能的!!

好吧,这就是我所做的。。。

我的新循环如下所示:

    <?php $ids = array();?>
    <?php foreach(query_posts("category_name=photos&showposts=-1") as $post_blog): ?>
        <?php $url = wp_get_attachment_image_src( get_post_thumbnail_id($post_blog->ID), \'gallery-full\' ); ?>                    
        <?php $thumbs = wp_get_attachment_image_src( get_post_thumbnail_id($post_blog->ID), \'gallery-thumbnail\' ); ?>
        <?php list($width) = getimagesize($thumbs[0]); ?>
        <?php $ids[] = array("id_post" => $post_blog->ID, "width" => $width, \'url\' => $url[0], \'title\' => $post_blog->post_title);?>
    <?php endforeach; ?>
    <?php $page = isset($_GET[\'paged\'])?$_GET[\'paged\']:0;?>
    <?php $post_filters = get_posts_by_paged(2440, $ids, $page);?>
    <?php $count = $post_filters[\'count\']; ?>

    <div class="gallery">
        <?php if($post_filters):?>
            <?php foreach($post_filters[\'per_page\'] as $post_filter) : ?>
                <a href="<?php echo $post_filter[\'url\']; ?>" class="thickbox" title="<?php echo $post_filter[\'title\']; ?>" alt="<?php echo $post_filter[\'title\']; ?>"><?php echo get_the_post_thumbnail($post_filter[\'id_post\'], "gallery-thumbnail", array("title" => $post_filter[\'title\'], "alt" => $post_filter[\'title\'])); ?></a>
            <?php endforeach; ?>
        <div class="clear">
            <!-- -->
        </div>
        <?php endif; ?>
    </div>
    <hr />
    <?php if ( $prev = get_previous_posts_link("Previous Page") ) { ?>
        <div class="left">
            <div class="button"><?php echo $prev ?></div>
        </div>
    <?php } ?>
    <?php global $paged; ?>
        <?php if($paged == 0) {
            $paged = count($ids) > 20?1:0;
        }?>
    <?php if ( $next = get_next_posts_link("Next Page",$count)) { ?>
        <div class="right">
            <div class="button"><?php echo $next ?></div>
        </div>
    <?php } ?>
我的分页函数如下所示:

<?php 
function get_posts_by_paged($width_custom, $posts = array(), $page)
{
    $post_per_page = array();

    $widths = 0;
    $group = array();
    foreach($posts as $key => $post)
    {
        $widths = $widths+$post[\'width\'];
        if($widths > $width_custom){
            array_push($post_per_page, $group);

            //reset
            $group = array();
            $group[] = $post;
            $widths = $post[\'width\'];
        }else{
            $group[] = $post;
        }

        //recover last
        if(count($posts) == $key+1)
        {
            array_push($post_per_page, $group);                
        }
    }

    $page = $page>0?$page-1:$page;

return array("count" => count($post_per_page), "per_page" => $post_per_page[$page]);
}
?>
就这样!!对我来说,2440是个神奇的数字,但你可以把它改成你喜欢的任何数字。2440是所有图像的总宽度。。。如果需要更多行。。。增加数字,如果你想要更少,就减少数字。

SO网友:avk

您所说的是不可能的,因为您的图像具有不同的宽度(如您所说),并且我们无法轻松确定可以放在3行中的图像数量。最好在每一行中定义一定数量的图像,或者定义块大小。然后相应地计算3行所需的图像数。所以,如果容器的宽度是600px,那么我们可以让每个块的宽度大约为200px,然后将图像在中心对齐。那会让事情看起来很好的。最好的方法是定义每个图像的大小。因此,即使在作物收割后,其大小仍保持不变。

基本上在代码中(添加了一个galleryImage类)

<a href="<?php $thumb = wp_get_attachment_image_src( get_post_thumbnail_id($post->ID), \'gallery-full\' ); $url = $thumb[\'0\']; echo $url; ?>" class="thickbox galleryImage" title="<?php the_title(); ?>" alt="<?php the_title(); ?>"><?php the_post_thumbnail("gallery-thumbnail", array("title" => get_the_title(), "alt" => get_the_title()) ); ?></a>
<?php endwhile; endif; ?>
然后添加一些css,如

.galleryImage{ width:200px; display:inline-block; }
我还没有测试过这个,但一般来说应该可以。

enter code here

结束

相关推荐

如何在所有其他筛选器/插件等之后筛选‘post_Gallery’

我正在尝试重新格式化库输出,更改默认列和链接设置,以及从库图像中排除特色图像。我可以使用*add\\u filter(\'post\\u gallery\'…)*在函数中。php,但这似乎覆盖了内核和插件以前对此过滤器的任何调用。m0r7if3r请求的覆盖示例:function test1($content, $attr) { return $content.\'Test One \';} add_filter(\'post_gallery\', \'test1\', 10, 2); fu