Group WP_Query by category

时间:2011-12-27 作者:Norcross

好的,这是我的设置:

称为“问题”的自定义帖子类型(对于杂志)具有与相应问题的帖子ID匹配的自定义元字段的帖子。

当我在一个“问题”帖子页面上时,我想查询所有相关的帖子,并按其关联的类别显示它们。我的post查询工作正常,我似乎无法理解类别分组。

这是我的问题

   <?php
    global $post;

    // List posts by the terms for a custom taxonomy of any post type   
    $current    = get_the_ID($post->ID);
    $args = array(
        \'post_type\'         => \'post\',
        \'post_status\'       => \'publish\',
        \'posts_per_page\'    => -1,
        \'orderby\'           => \'title\',
        \'meta_key\'          => \'_rkv_issue_select\',
        \'meta_value\'        => $current
    );

    $issue_cats = new WP_Query($args);

    if( $issue_cats->have_posts() ) :
    ?>
    <ul>
    <?php while ( $issue_cats->have_posts() ) : $issue_cats->the_post(); ?>

        <li><?php the_title(); ?></li>
    <?php endwhile; // end of loop ?>
    <?php else : ?>
    <?php endif; // if have_posts() ?>
    </ul>
    <?php wp_reset_query(); ?>

1 个回复
最合适的回答,由SO网友:CookiesForDevo 整理而成

您可以考虑使用SQL命令修改WP\\u查询以对其进行分组,但这有点超出了我当前的MySQL,然而,我总是通过在分类法本身上运行foreach来完成http://codex.wordpress.org/Function_Reference/get_categories

下面是一些示例代码:

<?php
    global $post;

    $current = get_the_ID($post->ID);
    $cargs = array(
        \'child_of\'      => 0,
        \'orderby\'       => \'name\',
        \'order\'         => \'ASC\',
        \'hide_empty\'    => 1,
        \'taxonomy\'      => \'category\', //change this to any taxonomy
    );
    foreach (get_categories($cargs) as $tax) :
        // List posts by the terms for a custom taxonomy of any post type   
        $args = array(
            \'post_type\'         => \'post\',
            \'post_status\'       => \'publish\',
            \'posts_per_page\'    => -1,
            \'orderby\'           => \'title\',
            \'meta_key\'          => \'_rkv_issue_select\',
            \'meta_value\'        => $current,
            \'tax_query\' => array(
                array(
                    \'taxonomy\'  => \'category\',
                    \'field\'     => \'slug\',
                    \'terms\'     => $tax->slug
                )
            )
        );
        if (get_posts($args)) :
    ?>
        <h2><?php echo $tax->name; ?></h2>
        <ul>
            <?php foreach(get_posts($args) as $p) : ?>
                <li><a href="<?php echo get_permalink($p); ?>"><?php echo $p->post_title; ?></a></li>
            <?php endforeach; ?>
        </ul>
    <?php 
        endif;
    endforeach; 
?>
这将遍历每个有帖子的类别(hide\\u empty设置为true),并对其执行get\\u posts操作(并且在输出任何内容之前检查是否有帖子)。

我不确定你想要什么样的标题来分隔分组,所以我使用了h2并添加了一个列表链接。

我将其更改为get\\u posts,因为我发现它更高效,因为它不重写全局$post变量(更少的数据库调用,更少的wp\\u reset\\u query())。

结束

相关推荐

WordPress中的自定义wp_Dropdown_Categories项目

我的搜索表单中有wp\\u dropdown\\u categories函数。php文件。现在,它允许用户选择要搜索的帖子类别。有没有办法让下拉列表包含自定义分类法和自定义帖子类型?例如,如果我有一个用于图库的自定义帖子类型,以及一个用于位置的自定义分类法。。。如何显示wp下拉列表,让用户选择搜索“照片”或“位置”?