web-dev-qa-db-ja.com

カテゴリ別WP_Queryグループ

OK、これが私の設定です。

「issue」と呼ばれるカスタム投稿タイプ(雑誌の場合)対応するissueの投稿IDと一致するカスタムメタフィールドを持つ投稿。

単一の「issue」投稿ページにいるときは、すべての関連投稿をクエリし、それらを関連カテゴリ別にグループ化して表示します。ポストクエリが機能しているのですが、カテゴリのグループ分けに頭を動かすことができないようです。

これが私の質問です

   <?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(); ?>
5
Norcross

WP_QueryをSQLコマンドで変更してそれらをグループ化することを検討することもできますが、これは私の現在のMySQLを少し超えていますが、私は常にこの http:// codexを使用して分類自体についてforeachを実行します。 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_emptyがtrueに設定されている)、それに対してget_postsを実行します(そして何も出力する前に投稿があることも確認します)。

あなたがグループ化を分けるためにあなたがヘッダーに何を望んでいたかわからなかったので、私はh2を使って、同様にリストへのリンクを加えました。

これはget_postsに変更しました。グローバル$ post変数をオーバーライドしないため、より効率的であることがわかったためです(データベース呼び出しが少なく、wp_reset_query()の使用が少ない)。

7
CookiesForDevo