web-dev-qa-db-ja.com

1つのカテゴリにしか現れないタグを表示する

私は現在のマニュアルより少ないマニュアルを手に入れようとしています。 1つのカテゴリにのみ表示されるタグを表示したいので、それらが2つのカテゴリを持つ投稿に含まれている場合は、そのタグを無視します。

次のコードは動作しますが、少し不格好です。理想的には、除外を追加しなくても済むようにしなくてもいいようにしたいのです。

<?php 
function pl8_artist_list($catname, $exclude) {
    $custom_query = new WP_Query('posts_per_page=-1&category_name='.$catname.'&cat='.$exclude.'');
    if ($custom_query->have_posts()) :
        while ($custom_query->have_posts()) : $custom_query->the_post();
            $posttags = get_the_tags();
            if ($posttags) {
                foreach($posttags as $tag) {
                    echo '<h2>' . $tag->name . '</h2>';
                    echo '<p>' . $tag->description . '</p>';
                    echo '<p><a href="http://beatexplorers.com/artist/'. $tag->slug . '">Read posts about ' . $tag->name . '</a></p>';
                }
            }
        endwhile;
    wp_reset_postdata(); // reset the query
    endif;
} 
?>

そして私はそれをこんな風に呼んでいます:

<?php
pl8_artist_list(trance, -3,-11,-4,-8);
?>

除外は、タグが表示される可能性がある他のカテゴリです。

私はPHPにはまったく慣れていないので、光を当てることができれば大歓迎です。

1
Valency

このループは、指定されたカテゴリ内のすべての投稿を取得することから始まります。次に、現在の投稿の各タグを調べ、各タグの投稿を取得し、すべての投稿に0または1のカテゴリがある場合は、そのカテゴリを印刷します。あなたがたくさんのタグ、たくさんの投稿を持っているのであれば、これは遅いのかもしれません。

function wa_60126_pl8_artist_list($catname) {

  //this part fetches the posts in the category provided
  $custom_query = new WP_Query('posts_per_page=-1&category_name='.$catname );
  if ($custom_query->have_posts()) :
      while ($custom_query->have_posts()) : $custom_query->the_post();


  $posttags = get_the_tags();

  // build the tag list
  if ($posttags) {
      foreach($posttags as $posttag) {

          // fetch the posts with same tags
          $posts_same_tag = get_posts( array ( 'tag' => $posttag->name ) );
          $is_safetag = TRUE;
          // check if has only one category
          foreach( $posts_same_tag as $st_post ) {
          // if it has more than one category, this tag is no good
              if ( count ( wp_get_post_categories($st_post->ID)) > 1 ){
                  $is_safetag = FALSE; break;
              }
          }
          // end of posts and its dirty?
          if($is_safetag) $safetags[] = $posttag;
      }
  }
  endwhile;
  wp_reset_postdata(); // reset the query
  endif;
  // now lets echo the safetags
  foreach( $safetags as $tag) {
        echo '<h2>' . $tag->name . '</h2>';
        echo '<p>' . $tag->description . '</p>';
        echo '<p><a href="http://beatexplorers.com/artist/'. $tag->slug . '">Read posts about ' . $tag->name . '</a></p>';
  }

} 
0
pcarvalho