WordPress动态地在列上分配帖子

时间:2013-11-27 16:31:46

标签: php css wordpress

我一直在构建一个基于inuitcss的WordPress模板,以获得一个响应式页面。

在这个模板中,我试图从某个类别中获取WP帖子,并将它们划分为预定义的列数。为实现这一点,我计算了类别中的帖子数量,并计算了帖子的必要数据,以便均匀分割。

我一直在使用this(页面上的最后一个)示例并更新了几个已弃用的函数。

我目前面临的问题是所有列都加载了相同的帖子,而且他们只加载了最后两个而不是该类别中的所有可用帖子。

以下代码是我目前使用的代码,结果可以在http://www.alikivanderkruijs.com/wp找到(点击“项目”)。

我已经坐了一会儿,似乎无法做到正确。我希望有人可以帮助我!

<?php
$proj_posts = get_posts('cat=15');
$count_proj_posts = count($proj_posts);
$split_proj_posts = round($count_proj_posts/2);
?>
<div class="gw">
        <div id="menuwrap">
            <h3 class="work">PROJECTS</h3>
                <div>
                    <div class="g  one-sixth  lap-one-sixth  nomob">
                    &nbsp;
                    </div>
                    <div class="g  two-sixths  lap-two-sixths  palm-one-whole">
                        <div class="content">
                        <?php query_posts('cat=15&showposts=' . $split_proj_posts . ''); ?>
                        <?php $posts = get_posts('posts_per_page=' . $split_proj_posts . '&offset=0'); foreach ($posts as $post) : the_post(); ?>
                        <?php static $proj_count1 = 0; if ($proj_count1 == $split_proj_posts) { break; } else { ?>
                            <div <?php post_class(); ?>>
                            <h4><a href="<?php the_permalink() ?>" rel="bookmark" title="<?php the_title_attribute(); ?>"><?php the_title(); ?></a></h4>
                            <?php the_content(); ?>
                            </div>
                            <?php $proj_count1++; } ?>
                            <?php endforeach; ?>
                        </div>
                    </div>
                    <div class="g  two-sixths  lap-two-sixths  palm-one-whole">
                        <div class="content">
                            <?php rewind_posts(); ?>
                            <?php query_posts('cat=15&showposts=' . $split_proj_posts . ''); ?>
                            <?php $posts = get_posts('posts_per_page=' . $split_proj_posts . '&offset=' . $split_proj_posts . ''); foreach ($posts as $post) : the_post(); ?>
                            <?php static $proj_count2 = 0; if ($proj_count2 == $split_proj_posts) { break; } else { ?>
                            <div <?php post_class(); ?>>
                            <h4><a href="<?php the_permalink() ?>" rel="bookmark" title="<?php the_title_attribute(); ?>"><?php the_title(); ?></a></h4>
                            <?php the_content(); ?>
                            </div>
                            <?php $proj_count2++; } ?>
                            <?php endforeach; ?>
                        </div>
                    </div>
                    <div class="g  one-sixth  lap-one-sixth  nomob">
                    </div>
                </div>

1 个答案:

答案 0 :(得分:0)

你过于复杂,只需获取所有帖子并计算到一半,然后回显结束和打开标签以创建新行:

          <div class="gw">
                <div id="menuwrap">
                    <h3 class="work">PROJECTS</h3>

                    <div>
                        <div class="g  one-sixth  lap-one-sixth  nomob">
                            &nbsp;
                        </div>
                        <div class="g  two-sixths  lap-two-sixths  palm-one-whole">
                            <div class="content">
                                <?php
                                $args = array(
                                    'numberposts' => -1,
                                    'posts_per_page' => '',
                                    'offset' => 0,
                                    'category' => '15',
                                    'orderby' => 'post_date',
                                    'order' => 'DESC',
                                    'include' => '',
                                    'exclude' => '',
                                    'meta_key' => '',
                                    'meta_value' => '',
                                    'post_type' => 'post',
                                    'post_mime_type' => '',
                                    'post_parent' => '',
                                    'post_status' => 'publish',
                                    'suppress_filters' => true);
                                $posts_array = get_posts($args);
                                $split_at = round(count($posts_array)/2)-1;
                                $count = 0;
                                foreach ($posts_array as $post_object):setup_postdata($post);
                                    ?>
                                    <div <?php post_class(); ?>>
                                        <h4><a href="<?php the_permalink() ?>" rel="bookmark"
                                               title="<?php the_title_attribute(); ?>"><?php the_title(); ?></a>
                                        </h4>
                                        <?php the_content(); ?>
                                    </div>
                                    <?php
                                    //IF we are halfway through, close 1st row and 
                                      start a new one
                                    if ($count == $split_at) {
                                        ?>
                            </div>
                        </div>
                        <div class="g  two-sixths  lap-two-sixths  palm-one-whole">
                            <div class="content">
                                        <?php
                                    }
                                    $count++; ?>

                                    <?
                                endforeach;
                                ?>
                            </div>
                        </div>
                        <div class="g  one-sixth  lap-one-sixth  nomob">
                        </div>
                    </div>
                </div>

我已经离开了完整的args数组,因为它对其他人很有用,但你只需要在你的情况下使用cat参数。

编辑好了,setup_postdata存在缺陷,只是检查了文档并且它没有按预期工作。建议的解决方法是像这样设置全局post对象:

  setup_postdata( $GLOBALS['post'] =& $post_object )

更改该部分应解决该问题。计数问题仍然很奇怪。