如何自动执行多个类别循环?

时间:2013-05-25 作者:1db

我已经在WordPress论坛上问过这个问题,但它像石头一样沉了下去,这一点都不奇怪。

我已经设置了一个带有多个循环的通用文章页面,以便显示自定义帖子类型“Articles”中任何类别的前三篇文章这些都硬编码到模板中,如下所示,仅更改类别ID号:

<?php
  $args = array(
  \'cat\' => 13,
  \'posts_per_page\' => 3,
  \'post_type\' => Article
  );
  query_posts( $args );

  if( have_posts() ):?>
。。等等下面是生成标题、永久链接、摘录等所需的所有代码。

这些回路工作正常。问题是它们是硬编码到模板中的,这需要在添加每个新类别后,我向模板文件添加一个循环。我需要找到一个解决方案,这样每次创建一个新类别时,它就会自动作为一个块添加到文章页面。此外,我需要让它创建一个链接,就像我使用wp\\u get\\u归档一样,这样每个类别都可以阻止链接到自己的页面,该页面包含该类别内的所有帖子(如果需要,可以分页)。

我想不出有什么功能可以做到这一点。以前有人遇到过这个问题吗?或者,这是否需要一些WordPress不支持的自定义PHP代码,除非遭到黑客攻击?

2 个回复
SO网友:Matthew Boynes

这其实很容易做到!首先,使用get_categories 获取所有类别的列表。接下来,循环浏览这些类别,并像上面所做的那样在这些类别中获取帖子。

作为补充说明,您应该避免对多个循环使用query\\u post。退房this page 它非常详细地介绍了这个主题。

示例代码

$categories = get_categories();
foreach ( $categories as $category ) :
    $category_query = new WP_Query( array(
        \'cat\' => $category->term_id,
        \'posts_per_page\' => 3,
        \'post_type\' => \'Article\'
    ) );

    while ( $category_query->have_posts() ) : $category_query->the_post();

        # Your existing code...

    endwhile;
    wp_reset_postdata();
endforeach;
foreach 循环,您可以使用get_category_link()

SO网友:fuxia

您可以通过以下方式获得所有类别:

$categories = get_categories( array ( \'fields\' => \'ids\' ) );
这将返回一个包含所有类别的数组。

那么你应该使用get_posts() 或anew WP_Query, 因为query_posts() 有很多副作用,不应该再使用了。

示例代码,如图所示:

$categories = get_categories( array ( \'number\' => 5 ) );
print \'<pre>$categories = \' . htmlspecialchars( var_export( $categories, TRUE ), ENT_QUOTES, \'utf-8\', FALSE ) . \'</pre>\';

$boxes = array();

foreach ( $categories as $category )
{
    $boxes[ $category->term_taxonomy_id ][\'posts\'] = get_posts(
        array(
            \'numberposts\'    => 5,
            \'category\'       => $category->term_taxonomy_id,
            \'posts_per_page\' => 3,
            \'post_type\'      => \'post\'
        )
    );
    $boxes[ $category->term_taxonomy_id ][\'title\'] = $category->category_nicename;
}

foreach ( $boxes as $cat_id => $box )
{
    printf(
        \'<h2><a href="%1$s">%2$s</a></h2>\',
        get_category_link( $cat_id ),
        $box[\'title\']
    );

    print \'<ul>\';

    foreach ( $box[\'posts\'] as $post )
        printf(
            \'<li><a href="%1$s">%2$s</a></li>\',
            get_permalink( $post->ID ),
            esc_html( $post->post_title )
        );

    print \'</ul>\';
}

结束

相关推荐

force login loophole

我想限制对WordPress网站的访问,只允许注册用户访问。我尝试了以下插件:它们都有相同的问题:在看到登录页面后,您可以轻松地在浏览器地址栏中重新键入URL,以绕过登录屏幕,直接访问主页,而无需登录。只有主页可以通过这种方式访问。单击任何菜单,将返回登录屏幕。我怀疑我的网站有问题,而不是插件有问题。我有以下活动插件:高级自定义字段Akismet分析360自定义帖子模板登录重定向选择问题(&L);A-WordPress问答插件原始HTML Relevanssi版本控制快速类型搜索(Swiftype Sea