smartdimple
フォーラムへの返信
-
フォーラム: テーマ
返信が含まれるトピック: 各カテゴリのポストを新しいものから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()) : ?> <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さん含め、この現象について改善策に思い当たる方が居られましたら、教えて頂けれると助かります。フォーラム: テーマ
返信が含まれるトピック: 各カテゴリのポストを新しいものから3件ずつメインインデックスに表示さ【訂正】
ごめんなさい。
逆クオートを加えそこねたためこんな形であらかじめ
と
・を配置してしまえばという箇所は
こんな形であらかじめ
<ul>と<li>
を配置してしまえばと記入してあります。
フォーラム: テーマ
返信が含まれるトピック: 各カテゴリのポストを新しいものから3件ずつメインインデックスに表示さ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テーマも試してみたいとは思っているのですが…以上を踏まえた上で、引き続き御指南・お付き合い頂ければ幸いです。
フォーラム: テーマ
返信が含まれるトピック: カテゴリ並び順を昇順から降順に変更したいphp-webさんの助言に従って
$categories = get_categories('hide_empty=1');
のなかに
$categories = get_categories('hide_empty=1&order=DESC');
と追加してみたことろ、
いままでうんともすんとも並びが変わらなかったカテゴリ順が
見事、降順に並び変わりました!pfcjpさん、shokun083さん、php-webさん、
貴重なお時間を使って助言して下さり、本当に有難うございました。フォーラム: テーマ
返信が含まれるトピック: カテゴリ並び順を昇順から降順に変更したいquery_posts($query_string. 'showposts=1&orderby=date&cat='.$category->cat_ID);
のなかにorder=DESC
を加えることは既に試していたのですが、うまく行きませんでした。
検索してみると&order=DESC
といった使い方が多かったため、~&orderby=date
~ のすぐ後ろに ~&orderby=date&order=DESC
~ と入れてみたのですが、表示順は変わりませんでした。
order=DESC
を入れ込む場所や記述の仕方が違うんでしょうか… - を配置してしまえば