フォーラムへの返信

5件の返信を表示中 - 1 - 5件目 (全5件中)
  • トピック投稿者 smartdimple

    (@smartdimple)

    <?php $categories = get_categories('hide_empty=1&order=DESC');
    foreach ($categories as $category) :
    query_posts('showposts=3&cat='.$category->cat_ID);
    if (have_posts()) : ?>
    
    <h2><a href="<?php echo get_category_link($category->cat_ID); ?>"><?php echo $category->name ?></a></h2>
    <?php while (have_posts()) : the_post(); ?>
    <div class="post">
    	<div class="thumb">
    		<a href="<?php the_permalink(); ?>"><?php dp_attachment_image($post->ID, 'thumbnail', 'alt="' . $post->post_title . '"'); ?></a>
    	</div>
    	<h3><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h3>
    	<p><?php echo dp_clean($post->post_content, 300); ?></p>
    	<a href="<?php the_permalink(); ?>" class="readmore">つづきを読む</a>
    </div>
    <?php endwhile; ?>
    
    <?php endif; endforeach; ?>

    このように<?php while (have_posts()) : the_post(); ?><?php endwhile; ?>をループさせたい箇所に配置しなおしたところ、ほぼ目的の通りに出力されるようになりました。
    showposts=3と指定してあるものの、どのカテゴリからも最新の1件目を抜かしたが2件目と3件目のポスト2件しか表示されなくなってしまいました。
    jim912さん含め、この現象について改善策に思い当たる方が居られましたら、教えて頂けれると助かります。

    トピック投稿者 smartdimple

    (@smartdimple)

    【訂正】

    ごめんなさい。
    逆クオートを加えそこねたため

    こんな形であらかじめ


    ・を配置してしまえば

    という箇所は

    こんな形であらかじめ
    <ul>と<li>を配置してしまえば

    と記入してあります。

    トピック投稿者 smartdimple

    (@smartdimple)

    jim912さん、お時間を割いて下さってありがとうございます。

    早速
    ... query_posts('showposts=1&cat='.$category->cat_ID); ...
    ... query_posts('showposts=3&cat='.$category->cat_ID); ... へ。

    ... if (have_posts()) : the_post(); ?>
    ... if (have_posts()) : while (have_post()) : the_post(); ?> へ。

    <?php endif; endforeach; ?>
    <?php end while; endif; endforeach; ?> としてみました。

    複数のポストが存在するカテゴリから3件表示されるようになりました。
    やりたかったことの半分はこれで達成出来そうです。

    <?php dp_list_pages; ?>についてですが
    <?php wp_list_pages; ?>では
    <ul><li><a>(固定ページ)</a></li><li><a>(固定ページ)</a></li> ... </ul>
    とマークアップされた固定ページへのリンクリストが生成されるのに対して、
    <ul> ... </ul>セレクタを除いた固定ページへのリンクリストが生成されました。

    functions.php内に

    # Displays a list of pages
    function dp_list_pages() {
    	global $wpdb;
    	$querystr = "SELECT $wpdb->posts.ID, $wpdb->posts.post_title FROM $wpdb->posts WHERE $wpdb->posts.post_status = 'publish' AND $wpdb->posts.post_type = 'page' ORDER BY $wpdb->posts.post_title ASC";
    	$pageposts = $wpdb->get_results($querystr, OBJECT);
    	if ($pageposts) {
    		foreach ($pageposts as $post) {
    			?><li><a href="<?php echo get_permalink($post->ID); ?>"><?php echo $post->post_title; ?></a></li><?php
    		}
    	}
    }

    という箇所があったので、jim912さんが予見された“独自関数”に当たるのではないかと思います。

    functions.php内の同じ並びに

    # Displays a list of categories
    function dp_list_categories($num=0, $exclude='') {
    	if (strlen($exclude)>0) $exclude = '&exclude=' . $exclude;
    	$categories = get_categories('hide_empty=1'.$exclude);
    	$first = true; $count = 0;
    	foreach ($categories as $category) {
    		if ($num>0) { $count++; if ($count>$num) break; } // limit
    		if ($category->parent<1) {
    			if ($first) { $first = false; $f = ' class="f"'; } else { $f = ''; }
    			?><li<?php echo $f; ?>>
    			<a href="<?php echo get_category_link($category->cat_ID); ?>"><?php echo $category->name ?><?php echo $raquo; ?></a></li>
    			<?php
    		}
    	}
    }

    という記述もあるため、
    <?php dp_list_categories; ?>と単純にテンプレートへ追加すれば
    <li><a>(カテゴリ)</a></li>という形で全カテゴリがリスト出力されそうです。

    でもdp_list_categoriesは使わず
    while ... endwhile 間のいずれかに

    [前略]
    <?php ... while (have_posts()) ... ?>
    <ul>
    <?php カテゴリ関連コード ?>
    <li><?php ポスト関連コード ?></li>
    </ul>
    <?php ... endwhile; ... ?>

    こんな形であらかじめ

    • を配置してしまえば
      3件分のポストデータをリスト化された状態で呼び出せるのかな?とも思えてきました。

    いま現在メインインデックスのポストループ周囲は

    <?php $categories = get_categories('hide_empty=1&order=DESC');
    foreach ($categories as $category) :
    query_posts('showposts=3&cat='.$category->cat_ID);
    if (have_posts()) : while (have_posts()) : the_post(); ?>
    
    <h2><a href="<?php echo get_category_link($category->cat_ID); ?>"><?php echo $category->name ?></a></h2>
    <div class="post">
    	<div class="thumb"><a href="<?php the_permalink(); ?>"><?php dp_attachment_image($post->ID, 'thumbnail', 'alt="' . $post->post_title . '"'); ?></a></div>
    	<h3><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h3>
    	<p><?php echo dp_clean($post->post_content, 300); ?></p>
    	<a href="<?php the_permalink(); ?>" class="readmore">つづきを読む</a>
    </div>
    
    <?php endwhile; endif; endforeach; ?>

    となっています。

    【※】
    これらのコードが書かれているのは、WP Theme Designerさんが配布されている“MEGANEWS”と言うマガジンスタイルのWPテーマです。
    今となってはちょっと古めな2009年製WPテーマですが、各カテゴリの最新のポストからタイトル・サムネール・抜粋・パーマリンクを呼び出し、ポストが投稿された日時順でメインインデックスに並べてくれるWPテーマなので重宝しています。
    ※同様の機能をもっとスマートに実現している・より新しいWPテーマがもしあれば、そういったWPテーマも試してみたいとは思っているのですが…

    以上を踏まえた上で、引き続き御指南・お付き合い頂ければ幸いです。

    フォーラム: テーマ
    返信が含まれるトピック: カテゴリ並び順を昇順から降順に変更したい
    トピック投稿者 smartdimple

    (@smartdimple)

    php-webさんの助言に従って
    $categories = get_categories('hide_empty=1');
    のなかに
    $categories = get_categories('hide_empty=1&order=DESC');
    と追加してみたことろ、
    いままでうんともすんとも並びが変わらなかったカテゴリ順が
    見事、降順に並び変わりました!

    pfcjpさん、shokun083さん、php-webさん、
    貴重なお時間を使って助言して下さり、本当に有難うございました。

    フォーラム: テーマ
    返信が含まれるトピック: カテゴリ並び順を昇順から降順に変更したい
    トピック投稿者 smartdimple

    (@smartdimple)

    query_posts($query_string. 'showposts=1&orderby=date&cat='.$category->cat_ID);
    のなかに order=DESC を加えることは既に試していたのですが、うまく行きませんでした。
    検索してみると&order=DESC といった使い方が多かったため、~ &orderby=date ~ のすぐ後ろに ~ &orderby=date&order=DESC ~ と入れてみたのですが、表示順は変わりませんでした。
    order=DESC を入れ込む場所や記述の仕方が違うんでしょうか…

5件の返信を表示中 - 1 - 5件目 (全5件中)