• 解決済 hachinicov

    (@hachinicov)


    ご閲覧ありがとうございます。
    何度も申し訳ありませんが、再度お知恵をお貸し頂ければ幸いです。

    taxonomy.phpにてタクソミーのアーカイブを作成しています。
    その中で最新1件を全文表示、その他をリスト(dl)表示しようとしているのですが、
    最新以外の投稿一覧の繰り返しの中にdlの開始・閉じタグが含まれ、dlタグごと繰り返されてしまいます。
    elseの外に出すなどしてみましたが、記事が1件しかない場合空の<dl>タグが残ってしまうため、頭を悩ませております。
    質問ばかりで申し訳ないのですが、アドバイスなどいただけますでしょうか…。
    お手数をおかけしますが、よろしくお願い致します。

    参照したサイト:
    http://ja.forums.wordpress.org/topic/3562?replies=12

    【Wordpress】3.5.1
    【表示したいページ】taxonomy.php

    現在のコード

    <?php $first = true; if(have_posts()): while(have_posts()): the_post(); ?>
    	<?php if($first): $first = false; ?>
    		<?php if( $attachment_id = get_field('top_banner_img') ): ?>
    			<?php
    				$attachment = get_post( $attachment_id );
    				$size = "full"; // (thumbnail, medium, large, full or custom size)
    				$image = wp_get_attachment_image_src( $attachment_id, $size );
    				$alt = get_post_meta($attachment->ID, '_wp_attachment_image_alt', true);
    				$image_title = $attachment->post_title;
    			?>
    			<img src="<?php echo $image[0]; ?>" alt="<?php echo $alt; ?>" title="<?php echo $image_title; ?>" width="250" />
    		<?php else : ?>
    			<?php the_post_thumbnail(array(250,250)); ?>
    		<?php endif; ?>
    			<h3><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h3>
    			<?php the_time("Y.n.j") ?>
    			<p><?php echo mb_substr(get_the_content(), 0, 150).'...'; ?></p>
    	<?php else: ?>
    		<dl class="newEntry">
    		<dt><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a><span><?php the_time("Y.n.j") ?></span></dt>
    		<dd><?php the_excerpt(); ?></dd>
    		</dl>
    	<?php endif; ?>
    <?php endwhile; endif; ?>

    現状の書き出されたソース

    <dl class="newEntry">
    <dt><a href="#">記事タイトル1</a><span>2013.6.7</span></dt>
    <dd><p>本文抜粋テキスト…</p>
    </dd>
    </dl>
    <dl class="newEntry">
    <dt><a href="#">記事タイトル2</a><span>2013.6.7</span></dt>
    <dd><p>本文抜粋テキスト…</p>
    </dd>
    </dl>

    目標とするソース

    <dl class="newEntry">
    <dt><a href="#">記事タイトル1</a><span>2013.6.7</span></dt>
    <dd><p>本文抜粋テキスト…</p>
    </dd>
    <dt><a href="#">記事タイトル2</a><span>2013.6.7</span></dt>
    <dd><p>本文抜粋テキスト…</p>
    </dd>
    </dl>

8件の返信を表示中 - 1 - 8件目 (全8件中)
  • そのまま引用します。

    <?php $first = true; if(have_posts()): ?>
    <dl class="newEntry">
    <?php while(have_posts()): the_post(); ?>
    	<?php if($first): $first = false; ?>
    		<?php if( $attachment_id = get_field('top_banner_img') ): ?>
    			<?php
    				$attachment = get_post( $attachment_id );
    				$size = "full"; // (thumbnail, medium, large, full or custom size)
    				$image = wp_get_attachment_image_src( $attachment_id, $size );
    				$alt = get_post_meta($attachment->ID, '_wp_attachment_image_alt', true);
    				$image_title = $attachment->post_title;
    			?>
    			<img src="<?php echo $image[0]; ?>" alt="<?php echo $alt; ?>" title="<?php echo $image_title; ?>" width="250" />
    		<?php else : ?>
    			<?php the_post_thumbnail(array(250,250)); ?>
    		<?php endif; ?>
    			<h3><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h3>
    			<?php the_time("Y.n.j") ?>
    			<p><?php echo mb_substr(get_the_content(), 0, 150).'...'; ?></p>
    	<?php else: ?>
    		<dt><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a><span><?php the_time("Y.n.j") ?></span></dt>
    		<dd><?php the_excerpt(); ?></dd>
    
    	<?php endif; ?>
    <?php endwhile; ?>
    </dl>
    <?php endif; ?>

    while文とはループ文です。ですのでその中には<dt></dt><dd></dd>だけにすることで希望の動きになります。

    追記:
    しかしこれだと、定義リストに全て含まれてしまうことになってしまうのでマークアップ上は正しくありません。サブループで1件画像などを含む記事を取得して、その下からoffsetを指定したループで定義リストを生成する等の方法が一番分かりやすいかと思います。

    dlをループの外に出すと良いように思います。

    <?php $first = true; if(have_posts()): ?>
    <dl class="newEntry">
    <?php while(have_posts()): the_post();?>
    - 省略 -
    <?php endwhile; ?>
    </dl>
     <?php endif; ?>

    書込んでいたら、ステキな回答がありました。
    これ、忘れて下さい。

    先頭と2番目以降を分けただけです。

    <?php if(have_posts()): the_post(); ?>
    	<?php if( $attachment_id = get_field('top_banner_img') ): ?>
    		<?php
    		$attachment = get_post( $attachment_id );
    		$size = "full"; // (thumbnail, medium, large, full or custom size)
    		$image = wp_get_attachment_image_src( $attachment_id, $size );
    		$alt = get_post_meta($attachment->ID, '_wp_attachment_image_alt', true);
    		$image_title = $attachment->post_title;
    		?>
    		<img src="<?php echo $image[0]; ?>" alt="<?php echo $alt; ?>" title="<?php echo $image_title; ?>" width="250" />
    	<?php else : ?>
    		<?php the_post_thumbnail(array(250,250)); ?>
    	<?php endif; ?>
    	<h3><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h3>
    	<?php the_time("Y.n.j") ?>
    	<p><?php echo mb_substr(get_the_content(), 0, 150).'...'; ?></p>
    <?php endif; ?>
    
    <?php if(have_posts()): ?>
    	<dl class="newEntry">
    	<?php while(have_posts()): the_post(); ?>
    		<dt><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a><span><?php the_time("Y.n.j") ?></span></dt>
    		<dd><?php the_excerpt(); ?></dd>
    	<?php endwhile; ?>
    	</dl>
    <?php endif; ?>

    ページネーションを付けることを考えると、こちらの方がいいかもしれません。

    <?php if(have_posts()): ?>
        <?php if (get_query_var('paged') == 1) : ?>
    	<?php the_post(); ?>
    	<?php if( $attachment_id = get_field('top_banner_img') ): ?>
                <?php
                $attachment = get_post( $attachment_id );
                $size = "full"; // (thumbnail, medium, large, full or custom size)
                $image = wp_get_attachment_image_src( $attachment_id, $size );
                $alt = get_post_meta($attachment->ID, '_wp_attachment_image_alt', true);
                $image_title = $attachment->post_title;
                ?>
                <img src="<?php echo $image[0]; ?>" alt="<?php echo $alt; ?>" title="<?php echo $image_title; ?>" width="250" />
    	<?php else : ?>
                <?php the_post_thumbnail(array(250,250)); ?>
    	<?php endif; ?>
    	<h3><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h3>
    	<?php the_time("Y.n.j") ?>
    	<p><?php echo mb_substr(get_the_content(), 0, 150).'...'; ?></p>
        <?php endif; ?>
    
        <?php if(have_posts()): ?>
            <dl class="newEntry">
            <?php while(have_posts()): the_post(); ?>
                <dt><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a><span><?php the_time("Y.n.j") ?></span></dt>
                <dd><?php the_excerpt(); ?></dd>
            <?php endwhile; ?>
            </dl>
        <?php endif; ?>
        <!-- ページネーション -->
    <?php endif; ?>

    トピック投稿者 hachinicov

    (@hachinicov)

    EisukeAkimotoさま
    ご回答ありがとうございます!

    サブループで1件画像などを含む記事を取得して、その下からoffsetを指定したループで定義リストを生成する

    すみません。勉強不足で理解しきれていないのですが、追ってしっかり習得したいと思います。

    taikikenさま
    いえ、ご回答いただけて嬉しいです。ありがとうございます!

    pluto1234さま
    またお世話になります。ご回答ありがとうございます。
    できればページネーションをつける形で表示したいと思うのですが、
    頂いた後者のコードの場合
    get_query_var('paged')
    pagedがタクソノミー名(引数?)になるかと思うのですが、
    そのタクソノミーの値を取得する方法が良くわからないので聞いてもよろしいでしょうか?
    色々と調べたのですが、現在表示しているページ(taxonomy.php)でのタクソノミー名取得は下記のような感じで良いのでしょうか…?

    $term = get_term_by(
      'slug',
      get_query_var( 'term' ),
      get_query_var( 'taxonomy' )
    );

    上記を

    <?php echo $term; ?>

    したところCatchable fatal error: Object of class stdClass could not be converted to string in〜と出てしまい、値が取れているのかも不明です。

    初歩的な質問ばかりで申し訳ありませんが、ご回答をいただけますと幸いです。

    タクソノミー名なら

    <?php
    $query_obj = get_queried_object();
    $taxonomy_obj = get_taxonomy($query_obj->taxonomy);
    echo esc_html($taxonomy_obj->label);
    ?>

    ターム名なら

    <?php single_term_title(); ?>
    もしくは、
    <?php
    $query_obj = get_queried_object();
    echo esc_html($query_obj->name);
    ?>

    修正

    $paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
    <?php if(have_posts()): ?>
        <?php if ($paged == 1) : ?>
         :

    トピック投稿者 hachinicov

    (@hachinicov)

    pluto1234さま
    何度もありがとうございます!

    頂いたコードを参考に作ってみたのですが、最新一件のみ表示されません。
    使用方法が間違っているのでしょうか…。

    <?php
    $query_obj = get_queried_object();
    $taxonomy_obj = get_taxonomy($query_obj->taxonomy);
    $taxonomy_name = ($taxonomy_obj->label);
    ?>
    <?php if(have_posts()): ?>
        <?php if (get_query_var($taxonomy_name) == 1) : ?>
    	<?php the_post(); ?>
    	<?php if( $attachment_id = get_field('top_banner_img') ): ?>
                <?php
                $attachment = get_post( $attachment_id );
                $size = "full"; // (thumbnail, medium, large, full or custom size)
                $image = wp_get_attachment_image_src( $attachment_id, $size );
                $alt = get_post_meta($attachment->ID, '_wp_attachment_image_alt', true);
                $image_title = $attachment->post_title;
                ?>
                <img src="<?php echo $image[0]; ?>" alt="<?php echo $alt; ?>" title="<?php echo $image_title; ?>" width="250" />
    	<?php else : ?>
                <?php the_post_thumbnail(array(250,250)); ?>
    	<?php endif; ?>
    	<h3><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h3>
    	<?php the_time("Y.n.j") ?>
    	<p><?php echo mb_substr(get_the_content(), 0, 150).'...'; ?></p>
        <?php endif; ?>
    
        <?php if(have_posts()): ?>
            <dl class="newEntry">
            <?php while(have_posts()): the_post(); ?>
                <dt><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a><span><?php the_time("Y.n.j") ?></span></dt>
                <dd><?php the_excerpt(); ?></dd>
            <?php endwhile; ?>
            </dl>
        <?php endif; ?>
        <!-- ページネーション -->
        <?php wp_pagenavi(); ?>
        <!-- /ページネーション -->
    <?php endif; ?>

    そこは、さっき修正を追加しておきました。

    それにしても

    <?php if (get_query_var($taxonomy_name) == 1) : ?>

    は、まったくおかしいです。

    トピック投稿者 hachinicov

    (@hachinicov)

    pluto1234さま

    ありがとうございます!
    以下にて無事表示することができました。

    <?php $paged = (get_query_var('paged')) ? get_query_var('paged') : 1; ?>
    <?php if(have_posts()): ?>
        <?php if ($paged == 1) : ?>
    	<?php the_post(); ?>
    	<?php if( $attachment_id = get_field('top_banner_img') ): ?>
                <?php
                $attachment = get_post( $attachment_id );
                $size = "full"; // (thumbnail, medium, large, full or custom size)
                $image = wp_get_attachment_image_src( $attachment_id, $size );
                $alt = get_post_meta($attachment->ID, '_wp_attachment_image_alt', true);
                $image_title = $attachment->post_title;
                ?>
                <img src="<?php echo $image[0]; ?>" alt="<?php echo $alt; ?>" title="<?php echo $image_title; ?>" width="250" />
    	<?php else : ?>
                <?php the_post_thumbnail(array(250,250)); ?>
    	<?php endif; ?>
    	<h3><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h3>
    	<?php the_time("Y.n.j") ?>
    	<p><?php echo mb_substr(get_the_content(), 0, 150).'...'; ?></p>
        <?php endif; ?>
    
        <?php if(have_posts()): ?>
            <dl class="newEntry">
            <?php while(have_posts()): the_post(); ?>
                <dt><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a><span><?php the_time("Y.n.j") ?></span></dt>
                <dd><?php the_excerpt(); ?></dd>
            <?php endwhile; ?>
            </dl>
        <?php endif; ?>
    	<!-- ページネーション -->
    	<!-- /ページネーション -->
    <?php endif; ?>

    <?php if (get_query_var($taxonomy_name) == 1) : ?>
    は用法としておかしいものだったのですね…。色々と根本的に理解ができていないようなので、この機会に知る事ができてよかったです!
    頂いたコードをきちんと理解できるように、色々調べてみたいと思います。

    この度も貴重なお時間を割いて頂き、まことにありがとうございました。

8件の返信を表示中 - 1 - 8件目 (全8件中)
  • トピック「最新1件全文表示・その他リスト表示の際のdlタグの開始・閉じタグの」には新たに返信することはできません。