代码之家  ›  专栏  ›  技术社区  ›  brettkelly

绕过循环的自定义wordpress index.php工作不正常

  •  2
  • brettkelly  · 技术社区  · 14 年前

    我正在为一个客户构建一个WordPress主题,它与我以前构建的任何其他主题都不同,主页是一个分布在多个不同容器和样式的帖子集合。它应该看起来和感觉像一本杂志,在每个月初,9个不同的帖子同时发布,每个都属于不同的类别。很多帖子的风格都不同,我无法使用传统的循环:

    <?php if(has_posts()) : while(has_posts)) : the_post(); ?>
    // do stuff
    <?php endwhile; endif; ?>
    

    首先,我将解释我是如何解决这个问题的,然后描述我遇到的问题。

    在index.php的顶部,我有以下php代码:

    $slugPostMap = array();
    $slugs = array(
        'art', 'big-idea', 'books', 'educators', 'film',
        'ministry-update', 'music', 'parents', 'students',
    );
    $args = array(
        'limitposts'    => 1,
        'order'         => 'date' 
    );
    
    foreach($slugs as $slug){
        $args['category_name'] = $slug;
        $post = get_posts($args);
        $slugPostMap[$slug] = $post;
    }
    

    这个 $slugs 数组是我需要查询的每个类别段塞的集合-每个都将显示一个日志。我的想法是,我可以循环使用这个数组,并使用另外一组固定的查询参数( $args ,为每个slug检索最新的日志。当我在slug数组上循环时,我将查询结果存储在一个关联数组中。( $slugPostMap )其中“slug”类别指向“实际柱”。

    稍后在页面正文中,我将从 $slugpostp邮件 使用类别段塞索引。下面是一个例子:

    <?php  
    foreach($slugPostMap['ministry-update'] as $p): 
        setup_postdata($p); 
    ?>
    <a class="homepageVideoPostTitle" href="<?php the_permalink(); ?>"><?php the_date('F Y','','',true); ?></a>
    <div class="homepageVideoPostSubtitle">
        <?php the_title();  ?>
    </div> <!-- end homepageVideoPostSubtitle -->
    <div class="homepageVideoPostContent">
        <?php the_excerpt(); ?>
    </div>
    <?php endforeach; ?>
    

    我之所以在开头使用foreach循环,是因为,据我所知,几个核心的wordpress模板标签( the_title() , the_permalink() 等)仅在循环中可用。因为我打电话来 setup_postdata() 在这里手动操作(在循环过程中在幕后调用),我还使用foreach来限制调用时发生的任何奇怪的巫毒事件的范围。 设置_postdata() .

    在大多数情况下,这是可行的。在上面的示例中,调用的结果 the_excerpt() 按预期显示。但是,其他一些模板标记没有返回任何值( “永久链接”() 标题() 具体来说)。我没有得到任何错误,当我在一个真正的实时WordPress安装中尝试这个时,页面加载良好。

    我假设问题在于我不了解如何在这种情况下正确地绕过循环,但是事实上没有任何错误或其他关于问题的线索,这让我来到了这里。

    这是运行在某种风格的Linux上的Wordpress3.0。我有许多其他的WordPress安装程序在这个框中运行,没有问题,我可以使用这个默认主题的相同WordPress实例。

    谢谢你抽出时间-对不起这部小说。如果我遗漏了任何相关细节,请告诉我。

    2 回复  |  直到 14 年前
        1
  •  0
  •   Pat    14 年前

    和你的情况一样,我也不知道巫毒会发生什么奇怪的事情,但是如果你改变主题代码使用循环之外的函数会怎么样。这个 get_permalink($id) single_post_title() 应该做你需要的。

        2
  •  0
  •   bhamrick    14 年前

    这些模板函数使用: global $post; 访问日志信息。

    而不是这个:

    foreach($slugPostMap['ministry-update'] as $p):

    您应该能够简单地使用$post作为子变量:

    foreach($slugPostMap['ministry-update'] as $post):