サポート » 使い方全般 » カスタム投稿タイプをターム毎に分類して表示したい

  • 初めまして、お世話になります。
    以下のサイトで紹介している通り、カスタム投稿タイプを使用してターム毎に分類し表示をしたいと思っています。

    参考サイト様:naoyu.net
    http://naoyu.net/wordpress/tax_query/583

    こちらの一覧ではサムネイルと記事タイトルを表示していますが、そこに記事内容を追加したいと考えています。
    コードは現在以下のとおりになっております。

    
    <?php
    	$args = array(
    	'parent'       => 0,
    	'hierarchical' => 0,
    	'orderby'      => 'term_order',
    	'order'        => 'ASC'
    	);
    		$taxonomy_name = 'タクソノミー名';
    		$taxonomys = get_terms($taxonomy_name,$args);
    		if(!is_wp_error($taxonomys) && count($taxonomys)):
    		foreach($taxonomys as $taxonomy):
    		$url = get_term_link($taxonomy->slug, $taxonomy_name);
    		$tax_posts = get_posts(array(
    				'post_type' => get_post_type(),
    				'posts_per_page' => -1,
    				'tax_query' => array(
    					array(
    						'taxonomy'=>'タクソノミー名',
    						'terms'=>array( $taxonomy->slug ),
    						'field'=>'slug',
    						'include_children'=>true,
    						'operator'=>'IN'
    						),
    					'relation' => 'AND'
    				)
    			));
    		if($tax_posts):
    		?>
    	<div class="title_btm3">
            <h2><?php echo esc_html($taxonomy->name); ?></h2>
    	</div>
        <div class="text_box clear">
    		<?php foreach($tax_posts as $tax_post): ?>
         <div class="print_box">
    		<?php if(has_post_thumbnail($tax_post->ID)) {
    			echo get_the_post_thumbnail($tax_post->ID,'post-thumbnail');
    		 } ?>
    		<?php echo get_the_title($tax_post->ID); ?>
            <?php the_post(); ?>
    	<span class="maker"><?php the_content(); ?></span>
         </div><!--/print_box-->
    	<?php endforeach; ?>
        </div><!--/text_box-->
        <?php wp_reset_query(); ?>
    <?php
    endif;
    endforeach;
    endif;
    ?>
    
    

    上記でアップロードすると
    「A」というタイトルに対し「A’」という内容になるはずが
    「B’」という内容になったり、恐らくループがおかしいのかな?と思うのですが、解決方法を模索してみたものの解決できませんでした。

    タイトルに対し、正しい内容が表示されるようにするにはどのようにすればよろしいのかご教授ください。
    何卒宜しくお願い申し上げます。
    質問の仕方に不備がございましたら、大変申し訳ございません。

3件の返信を表示中 - 1 - 3件目 (全3件中)
  • モデレーター gatespace

    (@gatespace)

    http://wpdocs.sourceforge.jp/テンプレートタグ/get_posts
    より抜粋
    get_posts() の基本的な書き方(テーマのテンプレートファイルの場合)

    <?php
    $args = array( 'posts_per_page' => 5, 'offset'=> 1, 'category' => 1 );
    $myposts = get_posts( $args );
    foreach ( $myposts as $post ) :
      setup_postdata( $post ); ?>
    	<li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
    <?php endforeach;
    wp_reset_postdata(); ?>

    ご自分のコードと何が違うのか比較してみてください。

    テストしていませんが、

    ループの周回ごとにget_postsを使っているので、

    ループの周回ごとに、wp_reset_postdata();が入る方がいいのかもしれないですね。
    ( setup_postdataを使っていないので、なくてもいいのかもしれませんが、症状からするとやってみてもいいんじゃないかと思います)

    wp_reset_query()は何のために使っているのか、よかったら教えてください。


     foreachの中でforeachするような処理なので、キャッシュしたほうがいいんじゃないですか?

    トピック投稿者 halu.m

    (@halum-1)

    お返事が遅くなってしまい、申し訳ございません。
    お教えいただき有難うございます。

    >gatespace様
    初心者ゆえ、分からないことが多々ありますがお教えいただいたコードと比べつつ進めてみようと思います。
    まず表示したいカスタム投稿タイプを表示させて、ちょこちょこいじってみます!

    >nobita様
    なるほど!wp_reset_postdata();を初めて知ったのですが、投稿記事をリセットするものなんですね。
    ただ、入れてみましたがやはりタイトルに対して投稿内容が合っていませんでした。。。

    ちなみにwp_reset_queryを入れていたのは、ループをリセットするために…と思っていたのですが、そもそもquery_postsを使用していないのに入れても意味ないですよね。。。とご指摘をいただいて、気付きました。

    引き続き、解決できるよう模索してみます。

3件の返信を表示中 - 1 - 3件目 (全3件中)
  • トピック「カスタム投稿タイプをターム毎に分類して表示したい」には新たに返信することはできません。