web-dev-qa-db-ja.com

最初の文字で用語を表示する

私は書評ブログを運営していて、私は異なったもの(評価、本のタイトル、そして著者)によってレビューをリストする複数のページを持っています

私は作者のためのカスタム分類法を持っています、そして私は基本的に私のコードにそれらに記事があるすべての用語をリストしてそれからポストをリストしてもらいます。それらはすべて最初の文字のアルファベット順です。私がやりたいことは、それが最初の手紙をつかみ、そのようにしてすべてを切り取ることです。今のようになります:

Bray、Libba

  • ビューティークイーンズ

Elkeles、Simone

  • 連鎖反応

私はそれがのようになりたい

B

リバ、ブレイ

  • ビューティークイーンズ

E

エルクレス、シモーネ

  • 連鎖反応

そのため、基本的には自分が持っているとおりに用語を表示するだけですが、各文字のセクションを表示すると、その文字で始まる用語が表示され、投稿が一覧表示されます。

<?php
$taxonomy = 'authors';//  e.g. post_tag, category
$param_type = 'authors'; //  e.g. tag__in, category__in
$term_args=array(
  'orderby' => 'name',
  'order' => 'ASC'
);
$terms = get_terms($taxonomy,$term_args);
if ($terms) {
  foreach( $terms as $term ) {
    $args=array(
      "$param_type" => $term->slug,
      'post_type' => 'reviews',
      'post_status' => 'publish',
      'posts_per_page' => -1,
      'caller_get_posts'=> 1,
      'meta_key' => 'booktitle', 
      'orderby' => 'meta_value',
      'order' => 'ASC'
      );
    $my_query = null;
    $my_query = new WP_Query($args);
    if( $my_query->have_posts() ) {

      echo '<h2>'.$term->name.'</h2>';
      while ($my_query->have_posts()) : $my_query->the_post(); 
  ?>
        <a href="<?php the_permalink() ?>" rel="bookmark" title="<?php the_title_attribute(); ?>"><?php echo c2c_get_custom('booktitle'); ?></a> by <?php echo c2c_get_custom('author'); ?><br />
       <?php
      endwhile;
    }
  }
}
wp_reset_query();  // Restore global post data stomped by the_post().
?>
1
Catiebug

このコードを試してください。

<?php
$taxonomy = 'authors';//  e.g. post_tag, category
$param_type = 'authors'; //  e.g. tag__in, category__in
$term_args=array(
            'orderby' => 'name',
            'order' => 'ASC'
);
$terms = get_terms($taxonomy,$term_args);
if ($terms) {
    $first_letter = null;
    foreach( $terms as $term ) {

        $flag = 0;

        if( $first_letter != substr( $term->name, 0, 1 ) ) {
          $first_letter = substr( $term->name, 0, 1 );
          $flag = 1;
        }

        if( $flag ) {
          echo '<strong>'.$first_letter.'</strong>'; // Output the first letter
        }

        $args=array(
          "$param_type" => $term->slug,
          'post_type' => 'reviews',
          'post_status' => 'publish',
          'posts_per_page' => -1,
          'caller_get_posts'=> 1,
          'meta_key' => 'booktitle', 
          'orderby' => 'meta_value',
          'order' => 'ASC'
          );

        $my_query = null;
        $my_query = new WP_Query($args);
        if( $my_query->have_posts() ) {
            echo '<h2>'.$term->name.'</h2>';
            while ($my_query->have_posts()) : $my_query->the_post(); ?>
                <a href="<?php the_permalink() ?>" rel="bookmark" title="<?php the_title_attribute(); ?>"><?php echo c2c_get_custom('booktitle'); ?></a> by <?php echo c2c_get_custom('author'); ?><br /><?php
            endwhile;
        }
    }
}
wp_reset_query();  // Restore global post data stomped by the_post().
?>
2
Joshua Abenazer