月内の書き込みを全部表示させたい
-
ブログで月内に書きこんだもの全部まとめて表示させる方法はあるのでしょうか?
テーマはTwentyElevenをつかっています。
カレンダーで月をクリックすれば10件や20件などの書き込みが表示されますが、これでは「ホーム」などの表示件数と同じ数の投稿が上限で表示されるだけです。これでは、月初めの部分が切れてしまい表示できません。
ホームの表示件数を例えば100件などと大きくすればできるかもしれませんが、それではいつも100件表示されるので重くなりそうだし、避けたいと思います。
(特定のブログにおいて)月内に書きこんだもの全部まとめて表示させたい場合、どうすれば良いのでしょうか?
-
特定の場合に表示件数を変更するには、query_posts() を使いますよ。
上記リンク先に説明ありますが、
posts_per_page=-1
とすると全件表示になります。
なので、もし月のアーカイブページでしたら、
ループの前に
<?php if (is_year()): query_posts($query_string .'&posts_per_page=-1'); endif; ?>
という条件を入れると、その月すべての投稿が表示されます。query_posts()を使ったら、wp_reset_query()をお忘れなく。
こんにちは。
最近のおすすめはpre_get_postsというアクションフックを用いることで、
メインクエリ(この場合はカテゴリー毎に表示件数を変える)の改変が可能です。これはテンプレートファイルにアクセスする前にクエリを改変しますので、
二重にクエリの呼び出しを行わなくて済むというメリットがあります。こちらのブログでは「カテゴリーアーカイブだったら表示する件数を5件にする」と言うコードが紹介されています。
3.3の新しい関数 is_main_query を使おう
※3.3となっていますが、3.2以前でも対応可能なコードが紹介されています。Codexも参照先のブログも「カテゴリーアーカイブ」となっていますが、
条件分岐タグを使えば、月別アーカイブでも使えます。テーマのfunctions.phpにこちらのコードを書くのみで、
アーカイブ用のテンプレートには変更を加えなくても大丈夫です。function mont_posts_per_page( $wp_query ) { if (!is_admin()) { //管理画面以外で if ( $wp_query->is_main_query() && $wp_query->is_month() ) { // メインのクエリーで月別のアーカイブページが表示されている場合 $wp_query->set( 'posts_per_page', -1 ); // 全件表示 } } } add_action( 'pre_get_posts', 'mont_posts_per_page' );gatespace様に追加でお願いです。お忙しいところ申し訳ありませんが。
最初に接続したときとか、「ホーム」をクリックしたときに最新の月の全件が表示されるようにはどのようにしたらいいのでしょうか?
この機能があれば、8月に接続したときに8月1日のものまで全部見れます。これが無いと、7月などを一度クリックし、その後改めて8月をクリックしないと8月の全部が見られません。rock6 さん>
フロントページ(サイトのホーム)にアクセスしたときに、見ている年月の投稿一覧を表示するには、
先ほどのコードに「フロントーページの場合の条件分岐」を
「見ている日」を取得して、その年月にあわせた投稿一覧を取得するようにコードを追加します。function mont_posts_per_page( $wp_query ) { if (!is_admin()) { //管理画面以外で if ( $wp_query->is_main_query() && $wp_query->is_month() ) { // メインクエリーが月別のアーカイブ $wp_query->set( 'posts_per_page', -1 ); // 全件表示 } elseif ( $wp_query->is_main_query() && $wp_query->is_front_page() ) { // メインクエリーがホーム(フロントページ) $wp_query->set( 'year', date_i18n('Y') ); // 当年の $wp_query->set( 'monthnum', date_i18n('n') ); // 当月の $wp_query->set( 'posts_per_page', -1 ); // 全件表示 // 「先頭に固定表示」した投稿をフロントページで表示しない場合は // 次の行のコメントアウトを外してください。 // $wp_query->set( 'post__not_in', get_option( 'sticky_posts' ) ); } } } add_action( 'pre_get_posts', 'mont_posts_per_page' );※年月を指定するところでPHPのdate関数ではなくWordPressのdate_i18nを使っています。
理由はこちらのスレッドを読んでください。
http://ja.forums.wordpress.org/topic/4884?replies=13※「見ている年月」の投稿が一件も無い場合、TwentyElevenであれば「Nothing Found(投稿が見つかりませんでした)」になります。
また
$wp_query->setの部分で指定しているパラメーターはWP_Queryで指定できるものと同じです。
条件分岐タグを組み合わせることで「フロントページでは特定のカテゴリのみを表示」やカスタム投稿タイプを含めるといった事が可能です。sysbirdさん>
テンプレートタグ毎にquery_postsを書いたり、それが増えることを考えたら、
functions.phpのみで住むので便利ですよ。追加のお願いにもご回答をいただき、まことにありがとうございました。
sysbirdさんも書いていますが多くの人がほしがるのではないでしょうか。このような便利なものをほっておくのはもったいないですね。
これは何と言う言語を勉強すればわかるようになるのでしょうか?
わたしはVisualBasic、V6しか知らないのですが。これは何と言う言語を勉強すればわかるようになるのでしょうか?
WordPressのコアファイルはPHPです。
その他にWordPress特有の関数・テンプレートタグがあります。また、テーマを作るときに「見た目」という部分では
HTML、CSSの知識が必要です。HTML、CSS、PHPについてはこのフォーラムから外れるので書きませんが、
WordPressの公式ドキュメントについては
Codex(日本語、英語)を読んでください。
ただし、リファレンスが中心ですので、一から勉強されるのであれば、
WordPress関連の書籍を購入されることをお勧めします。もう少し踏み込んだ内容については、そういうTipsを書かれたブログがたくさんあります。
また、各地で開催されているWordBenchという勉強会に参加されるのもおすすめです。また年に数回開催されるWordCampではセッションと呼ばれるセミナーも開催されます。
(近いところで9/15の東京と11/3の大阪)※問題が解決されたら「解決済み」にしてください。
トピック「月内の書き込みを全部表示させたい」には新たに返信することはできません。